16.45/5.31 YES 16.45/5.32 proof of /export/starexec/sandbox/benchmark/theBenchmark.c 16.45/5.32 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 16.45/5.32 16.45/5.32 16.45/5.32 Termination of the given C Problem could be proven: 16.45/5.32 16.45/5.32 (0) C Problem 16.45/5.32 (1) CToLLVMProof [EQUIVALENT, 175 ms] 16.45/5.32 (2) LLVM problem 16.45/5.32 (3) LLVMToTerminationGraphProof [EQUIVALENT, 790 ms] 16.45/5.32 (4) LLVM Symbolic Execution Graph 16.45/5.32 (5) SEGraph to IRS [EQUIVALENT, 87 ms] 16.45/5.32 (6) IntTRS 16.45/5.32 (7) IRS2T2 [EQUIVALENT, 0 ms] 16.45/5.32 (8) T2IntSys 16.45/5.32 (9) T2 [EQUIVALENT, 934 ms] 16.45/5.32 (10) YES 16.45/5.32 16.45/5.32 16.45/5.32 ---------------------------------------- 16.45/5.32 16.45/5.32 (0) 16.45/5.32 Obligation: 16.45/5.32 c file /export/starexec/sandbox/benchmark/theBenchmark.c 16.45/5.32 ---------------------------------------- 16.45/5.32 16.45/5.32 (1) CToLLVMProof (EQUIVALENT) 16.45/5.32 Compiled c-file /export/starexec/sandbox/benchmark/theBenchmark.c to LLVM. 16.45/5.32 ---------------------------------------- 16.45/5.32 16.45/5.32 (2) 16.45/5.32 Obligation: 16.45/5.32 LLVM Problem 16.45/5.32 16.45/5.32 Aliases: 16.45/5.32 16.45/5.32 Data layout: 16.45/5.32 16.45/5.32 "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.45/5.32 16.45/5.32 Machine: 16.45/5.32 16.45/5.32 "x86_64-pc-linux-gnu" 16.45/5.32 16.45/5.32 Type definitions: 16.45/5.32 16.45/5.32 Global variables: 16.45/5.32 16.45/5.32 Name: x initVal: 0 type: i32 addrSpace: null alignment: 4 threadLocal: false constant: false linkageType: COMMON section: null 16.45/5.32 16.45/5.32 Function declarations and definitions: 16.45/5.32 16.45/5.32 *BasicFunctionTypename: "__VERIFIER_nondet_int" returnParam: i32 parameters: () variableLength: false visibilityType: DEFAULT callingConvention: ccc 16.45/5.32 *BasicFunctionTypename: "foo" linkageType: EXTERNALLY_VISIBLE returnParam: BasicVoidType parameters: () variableLength: false visibilityType: DEFAULT callingConvention: ccc 16.45/5.32 0: 16.45/5.32 %1 = load @x 16.45/5.32 %2 = add %1 -1 16.45/5.32 store %2, @x 16.45/5.32 ret void 16.45/5.32 16.45/5.32 *BasicFunctionTypename: "main" linkageType: EXTERNALLY_VISIBLE returnParam: i32 parameters: () variableLength: false visibilityType: DEFAULT callingConvention: ccc 16.45/5.32 0: 16.45/5.32 %1 = alloca i32, align 4 16.45/5.32 store 0, %1 16.45/5.32 %2 = call i32 @__VERIFIER_nondet_int() 16.45/5.32 store %2, @x 16.45/5.32 br %3 16.45/5.32 3: 16.45/5.32 %4 = load @x 16.45/5.32 %5 = icmp sgt %4 0 16.45/5.32 br %5, %6, %12 16.45/5.32 6: 16.45/5.32 %7 = call i32 @__VERIFIER_nondet_int() 16.45/5.32 %8 = icmp ne %7 0 16.45/5.32 br %8, %9, %10 16.45/5.32 9: 16.45/5.32 Unnamed Call-Instruction = call BasicVoidType @foo() 16.45/5.32 br %11 16.45/5.32 10: 16.45/5.32 Unnamed Call-Instruction = call BasicVoidType @foo() 16.45/5.32 br %11 16.45/5.32 11: 16.45/5.32 br %3 16.45/5.32 12: 16.45/5.32 ret 0 16.45/5.32 16.45/5.32 16.45/5.32 Analyze Termination of all function calls matching the pattern: 16.45/5.32 main() 16.45/5.32 ---------------------------------------- 16.45/5.32 16.45/5.32 (3) LLVMToTerminationGraphProof (EQUIVALENT) 16.45/5.32 Constructed symbolic execution graph for LLVM program and proved memory safety. 16.45/5.32 ---------------------------------------- 16.45/5.32 16.45/5.32 (4) 16.45/5.32 Obligation: 16.45/5.32 SE Graph 16.45/5.32 ---------------------------------------- 16.45/5.32 16.45/5.32 (5) SEGraph to IRS (EQUIVALENT) 16.45/5.32 Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: 16.45/5.32 Generated rules. Obtained 77 rulesP rules: 16.45/5.32 f_67(v1, v2, v3, 3, 1) -> f_68(v1, v5, v2, v6, v3, 3, 1, 4) :|: 1 <= v5 && v6 = 3 + v5 && 4 <= v2 && 4 <= v6 16.45/5.32 f_68(v1, v5, v2, v6, v3, 3, 1, 4) -> f_69(v1, v5, v2, v6, v3, 0, 3, 1, 4) :|: TRUE 16.45/5.32 f_69(v1, v5, v2, v6, v3, 0, 3, 1, 4) -> f_70(v1, v5, v7, v2, v6, v3, 0, 3, 1, 4) :|: TRUE 16.45/5.32 f_70(v1, v5, v7, v2, v6, v3, 0, 3, 1, 4) -> f_71(v1, v5, v7, v2, v6, 0, 3, 1, 4) :|: TRUE 16.45/5.32 f_71(v1, v5, v7, v2, v6, 0, 3, 1, 4) -> f_72(v1, v5, v7, v2, v6, 0, 3, 1, 4) :|: TRUE 16.45/5.32 f_72(v1, v5, v7, v2, v6, 0, 3, 1, 4) -> f_73(v1, v5, v7, v2, v6, 0, 3, 1, 4) :|: 0 = 0 16.45/5.32 f_73(v1, v5, v7, v2, v6, 0, 3, 1, 4) -> f_74(v1, v5, v7, v2, v6, 0, 3, 1, 4) :|: 0 < v7 16.45/5.32 f_73(v1, v5, v7, v2, v6, 0, 3, 1, 4) -> f_75(v1, v5, v7, v2, v6, 0, 3, 1, 4) :|: v7 <= 0 16.45/5.32 f_74(v1, v5, v7, v2, v6, 0, 3, 1, 4) -> f_76(v1, v5, v7, 1, v2, v6, 0, 3, 4) :|: 0 = 0 16.45/5.32 f_75(v1, v5, v7, v2, v6, 0, 3, 1, 4) -> f_77(v1, v5, v7, 0, v2, v6, 3, 1, 4) :|: 0 = 0 16.45/5.32 f_76(v1, v5, v7, 1, v2, v6, 0, 3, 4) -> f_78(v1, v5, v7, 1, v2, v6, 0, 3, 4) :|: TRUE 16.45/5.32 f_77(v1, v5, v7, 0, v2, v6, 3, 1, 4) -> f_79(v1, v5, v7, 0, v2, v6, 3, 1, 4) :|: TRUE 16.45/5.32 f_78(v1, v5, v7, 1, v2, v6, 0, 3, 4) -> f_80(v1, v5, v7, 1, v9, v2, v6, 0, 3, 4) :|: TRUE 16.45/5.32 f_80(v1, v5, v7, 1, v9, v2, v6, 0, 3, 4) -> f_81(v1, v5, v7, 1, v9, v2, v6, 0, 3, 4) :|: v9 != 0 16.45/5.32 f_80(v1, v5, v7, 1, v9, v2, v6, 0, 3, 4) -> f_82(v1, v5, v7, 1, 0, v2, v6, 3, 4) :|: v9 = 0 16.45/5.32 f_81(v1, v5, v7, 1, v9, v2, v6, 0, 3, 4) -> f_83(v1, v5, v7, 1, v9, v2, v6, 0, 3, 4) :|: 0 = 0 16.45/5.32 f_82(v1, v5, v7, 1, 0, v2, v6, 3, 4) -> f_84(v1, v5, v7, 1, 0, v2, v6, 3, 4) :|: 0 = 0 16.45/5.32 f_83(v1, v5, v7, 1, v9, v2, v6, 0, 3, 4) -> f_85(v1, v5, v7, 1, v9, v2, v6, 0, 3, 4) :|: TRUE 16.45/5.32 f_84(v1, v5, v7, 1, 0, v2, v6, 3, 4) -> f_86(v1, v5, v7, 1, 0, v2, v6, 3, 4) :|: TRUE 16.45/5.32 f_85(v1, v5, v7, 1, v9, v2, v6, 0, 3, 4) -> f_87(v1, v2, v5, v6, 0, v7, 1, v9, 3, 4) :|: TRUE 16.45/5.32 f_86(v1, v5, v7, 1, 0, v2, v6, 3, 4) -> f_88(v1, v2, v5, v6, 0, v7, 1, 3, 4) :|: TRUE 16.45/5.32 f_87(v1, v2, v5, v6, 0, v7, 1, v9, 3, 4) -> f_89(v1, v7, v2, v5, v6, 0, 1, v9, 3, 4) :|: 0 = 0 16.45/5.32 f_88(v1, v2, v5, v6, 0, v7, 1, 3, 4) -> f_131(v1, v2, v5, v6, v7, 0, v49, 1, 3, 4) :|: TRUE 16.45/5.32 f_89(v1, v7, v2, v5, v6, 0, 1, v9, 3, 4) -> f_91(v1, v7, v10, v2, v5, v6, 0, 1, v9, 3, 4) :|: 1 + v10 = v7 && 0 <= v10 16.45/5.32 f_91(v1, v7, v10, v2, v5, v6, 0, 1, v9, 3, 4) -> f_93(v1, v7, v10, v2, v5, v6, 0, 1, v9, 3, 4) :|: TRUE 16.45/5.32 f_93(v1, v7, v10, v2, v5, v6, 0, 1, v9, 3, 4) -> f_95(v1, v5, v7, 1, v9, v2, v6, 0, v10, 3, 4) :|: TRUE 16.45/5.32 f_95(v1, v5, v7, 1, v9, v2, v6, 0, v10, 3, 4) -> f_97(v1, v5, v7, 1, v9, v2, v6, 0, v10, 3, 4) :|: TRUE 16.45/5.32 f_97(v1, v5, v7, 1, v9, v2, v6, 0, v10, 3, 4) -> f_99(v1, v5, v7, 1, v9, v2, v6, 0, v10, 3, 4) :|: TRUE 16.45/5.32 f_99(v1, v5, v7, 1, v9, v2, v6, 0, v10, 3, 4) -> f_143(v1, v5, v7, v7, 1, v9, v2, v6, v10, 0, 3, 4) :|: TRUE 16.45/5.32 f_131(v47, v53, v48, v54, v50, 0, v49, 1, 3, 4) -> f_175(v47, v53, v48, v54, v50, 0, v108, 1, 3, 4) :|: TRUE 16.45/5.32 f_143(v62, v63, v64, v65, 1, v67, v68, v69, v70, 0, 3, 4) -> f_187(v62, v63, v64, v65, 1, v67, v68, v69, v70, 0, 3, 4) :|: TRUE 16.45/5.32 f_175(v106, v112, v107, v113, v109, 0, v108, 1, 3, 4) -> f_177(v106, v109, v112, v107, v113, 0, v108, 1, 3, 4) :|: 0 = 0 16.45/5.32 f_177(v106, v109, v112, v107, v113, 0, v108, 1, 3, 4) -> f_179(v106, v109, v116, v112, v107, v113, 0, v108, 1, 3, 4) :|: 1 + v116 = v109 && 0 <= v116 16.45/5.32 f_179(v106, v109, v116, v112, v107, v113, 0, v108, 1, 3, 4) -> f_181(v106, v109, v116, v112, v107, v113, 0, v108, 1, 3, 4) :|: TRUE 16.45/5.32 f_181(v106, v109, v116, v112, v107, v113, 0, v108, 1, 3, 4) -> f_183(v106, v107, v108, v109, 1, 0, v112, v113, v116, 3, 4) :|: TRUE 16.45/5.32 f_183(v106, v107, v108, v109, 1, 0, v112, v113, v116, 3, 4) -> f_185(v106, v107, v108, v109, 1, 0, v112, v113, v116, 3, 4) :|: TRUE 16.45/5.32 f_185(v106, v107, v108, v109, 1, 0, v112, v113, v116, 3, 4) -> f_188(v106, v107, v108, v109, 1, 0, v112, v113, v116, 3, 4) :|: TRUE 16.45/5.32 f_187(v121, v122, v123, v124, 1, v126, v127, v128, v129, 0, 3, 4) -> f_189(v121, v122, v123, v129, 1, v126, v127, v128, 0, 3, 4) :|: 0 = 0 16.45/5.32 f_188(v106, v107, v108, v109, 1, 0, v112, v113, v116, 3, 4) -> f_190(v106, v107, v108, v116, 1, 0, v112, v113, 3, 4) :|: 0 = 0 16.45/5.32 f_189(v121, v122, v123, v129, 1, v126, v127, v128, 0, 3, 4) -> f_191(v121, v122, v123, v129, 1, v126, v127, v128, 0, 3, 2, 4) :|: 0 < v129 && 2 <= v123 16.45/5.32 f_189(v121, v122, v123, v129, 1, v126, v127, v128, 0, 3, 4) -> f_192(v121, v122, v123, 0, 1, v126, v127, v128, 3, 4) :|: v129 <= 0 16.45/5.32 f_190(v106, v107, v108, v116, 1, 0, v112, v113, 3, 4) -> f_193(v106, v107, v108, v116, 1, 0, v112, v113, 3, 2, 4) :|: 0 < v116 && 2 <= v108 16.45/5.32 f_190(v106, v107, v108, v116, 1, 0, v112, v113, 3, 4) -> f_194(v106, v107, v108, 0, 1, v112, v113, 3, 4) :|: v116 <= 0 16.45/5.32 f_191(v121, v122, v123, v129, 1, v126, v127, v128, 0, 3, 2, 4) -> f_195(v121, v122, v123, v129, 1, v126, v127, v128, 0, 3, 2, 4) :|: 0 = 0 16.45/5.32 f_192(v121, v122, v123, 0, 1, v126, v127, v128, 3, 4) -> f_196(v121, v122, v123, 0, v126, 1, v127, v128, 3, 4) :|: 0 = 0 16.45/5.32 f_193(v106, v107, v108, v116, 1, 0, v112, v113, 3, 2, 4) -> f_197(v106, v107, v108, v116, 1, 0, v112, v113, 3, 2, 4) :|: 0 = 0 16.45/5.32 f_194(v106, v107, v108, 0, 1, v112, v113, 3, 4) -> f_198(v106, v107, v108, 0, v112, v113, 3, 1, 4) :|: 0 = 0 16.45/5.32 f_195(v121, v122, v123, v129, 1, v126, v127, v128, 0, 3, 2, 4) -> f_199(v121, v122, v123, v129, 1, v126, v127, v128, 0, 3, 2, 4) :|: TRUE 16.45/5.32 f_196(v121, v122, v123, 0, v126, 1, v127, v128, 3, 4) -> f_200(v121, v122, v123, 0, v126, 1, v127, v128, 3, 4) :|: TRUE 16.45/5.32 f_197(v106, v107, v108, v116, 1, 0, v112, v113, 3, 2, 4) -> f_201(v106, v107, v108, v116, 1, 0, v112, v113, 3, 2, 4) :|: TRUE 16.45/5.32 f_198(v106, v107, v108, 0, v112, v113, 3, 1, 4) -> f_202(v106, v107, v108, 0, v112, v113, 3, 1, 4) :|: TRUE 16.45/5.32 f_199(v121, v122, v123, v129, 1, v126, v127, v128, 0, 3, 2, 4) -> f_203(v121, v122, v123, v129, 1, v145, v127, v128, 0, 3, 2, 4) :|: TRUE 16.45/5.32 f_201(v106, v107, v108, v116, 1, 0, v112, v113, 3, 2, 4) -> f_204(v106, v107, v108, v116, 1, v146, 0, v112, v113, 3, 2, 4) :|: TRUE 16.45/5.32 f_203(v121, v122, v123, v129, 1, v145, v127, v128, 0, 3, 2, 4) -> f_205(v121, v122, v123, v129, 1, v145, v127, v128, 0, 3, 2, 4) :|: v145 != 0 16.45/5.32 f_203(v121, v122, v123, v129, 1, v145, v127, v128, 0, 3, 2, 4) -> f_206(v121, v122, v123, v129, 1, 0, v127, v128, 3, 2, 4) :|: v145 = 0 16.45/5.32 f_204(v106, v107, v108, v116, 1, v146, 0, v112, v113, 3, 2, 4) -> f_207(v106, v107, v108, v116, 1, v146, 0, v112, v113, 3, 2, 4) :|: v146 != 0 16.45/5.32 f_204(v106, v107, v108, v116, 1, v146, 0, v112, v113, 3, 2, 4) -> f_208(v106, v107, v108, v116, 1, 0, v112, v113, 3, 2, 4) :|: v146 = 0 16.45/5.32 f_205(v121, v122, v123, v129, 1, v145, v127, v128, 0, 3, 2, 4) -> f_209(v121, v122, v123, v129, 1, v145, v127, v128, 0, 3, 2, 4) :|: 0 = 0 16.45/5.32 f_206(v121, v122, v123, v129, 1, 0, v127, v128, 3, 2, 4) -> f_210(v121, v122, v123, v129, 1, 0, v127, v128, 3, 2, 4) :|: 0 = 0 16.45/5.32 f_207(v106, v107, v108, v116, 1, v146, 0, v112, v113, 3, 2, 4) -> f_211(v106, v107, v108, v116, 1, v146, v112, v113, 0, 3, 2, 4) :|: 0 = 0 16.45/5.32 f_208(v106, v107, v108, v116, 1, 0, v112, v113, 3, 2, 4) -> f_212(v106, v107, v108, v116, 1, 0, v112, v113, 3, 2, 4) :|: 0 = 0 16.45/5.32 f_209(v121, v122, v123, v129, 1, v145, v127, v128, 0, 3, 2, 4) -> f_213(v121, v122, v123, v129, 1, v145, v127, v128, 0, 3, 2, 4) :|: TRUE 16.45/5.32 f_210(v121, v122, v123, v129, 1, 0, v127, v128, 3, 2, 4) -> f_214(v121, v122, v123, v129, 1, 0, v127, v128, 3, 2, 4) :|: TRUE 16.45/5.32 f_211(v106, v107, v108, v116, 1, v146, v112, v113, 0, 3, 2, 4) -> f_215(v106, v107, v108, v116, 1, v146, v112, v113, 0, 3, 2, 4) :|: TRUE 16.45/5.32 f_212(v106, v107, v108, v116, 1, 0, v112, v113, 3, 2, 4) -> f_216(v106, v107, v108, v116, 1, 0, v112, v113, 3, 2, 4) :|: TRUE 16.45/5.32 f_213(v121, v122, v123, v129, 1, v145, v127, v128, 0, 3, 2, 4) -> f_217(v121, v127, v122, v128, v129, 0, v123, 1, v145, 3, 2, 4) :|: TRUE 16.45/5.32 f_214(v121, v122, v123, v129, 1, 0, v127, v128, 3, 2, 4) -> f_218(v121, v127, v122, v128, v129, 0, v123, 1, 3, 2, 4) :|: TRUE 16.45/5.32 f_215(v106, v107, v108, v116, 1, v146, v112, v113, 0, 3, 2, 4) -> f_213(v106, v107, v108, v116, 1, v146, v112, v113, 0, 3, 2, 4) :|: TRUE 16.45/5.32 f_216(v106, v107, v108, v116, 1, 0, v112, v113, 3, 2, 4) -> f_214(v106, v107, v108, v116, 1, 0, v112, v113, 3, 2, 4) :|: TRUE 16.45/5.32 f_217(v121, v127, v122, v128, v129, 0, v123, 1, v145, 3, 2, 4) -> f_219(v121, v129, v127, v122, v128, 0, v123, 1, v145, 3, 2, 4) :|: 0 = 0 16.45/5.32 f_218(v121, v127, v122, v128, v129, 0, v123, 1, 3, 2, 4) -> f_175(v121, v127, v122, v128, v129, 0, v108, 1, 3, 4) :|: TRUE 16.45/5.32 f_219(v121, v129, v127, v122, v128, 0, v123, 1, v145, 3, 2, 4) -> f_220(v121, v129, v174, v127, v122, v128, 0, v123, 1, v145, 3, 2, 4) :|: 1 + v174 = v129 && 0 <= v174 16.45/5.32 f_220(v121, v129, v174, v127, v122, v128, 0, v123, 1, v145, 3, 2, 4) -> f_221(v121, v129, v174, v127, v122, v128, 0, v123, 1, v145, 3, 2, 4) :|: TRUE 16.45/5.32 f_221(v121, v129, v174, v127, v122, v128, 0, v123, 1, v145, 3, 2, 4) -> f_222(v121, v122, v123, v129, 1, v145, v127, v128, 0, v174, 3, 2, 4) :|: TRUE 16.45/5.32 f_222(v121, v122, v123, v129, 1, v145, v127, v128, 0, v174, 3, 2, 4) -> f_223(v121, v122, v123, v129, 1, v145, v127, v128, 0, v174, 3, 2, 4) :|: TRUE 16.45/5.32 f_223(v121, v122, v123, v129, 1, v145, v127, v128, 0, v174, 3, 2, 4) -> f_224(v121, v122, v123, v129, 1, v145, v127, v128, 0, v174, 3, 2, 4) :|: TRUE 16.45/5.32 f_224(v121, v122, v123, v129, 1, v145, v127, v128, 0, v174, 3, 2, 4) -> f_187(v121, v122, v123, v129, 1, v145, v127, v128, v174, 0, 3, 4) :|: TRUE 16.45/5.32 Combined rules. Obtained 12 rulesP rules: 16.45/5.32 f_190(v106:0, v107:0, v108:0, v116:0, 1, 0, v112:0, v113:0, 3, 4) -> f_202(v106:0, v107:0, v108:0, 0, v112:0, v113:0, 3, 1, 4) :|: v116:0 < 1 16.45/5.32 f_189(v121:0, v122:0, v123:0, 1 + v174:0, 1, v126:0, v127:0, v128:0, 0, 3, 4) -> f_189(v121:0, v122:0, v123:0, v174:0, 1, v145:0, v127:0, v128:0, 0, 3, 4) :|: v123:0 > 1 && v174:0 > -1 && v145:0 < 0 16.45/5.32 f_189(v121:0, v122:0, v123:0, 1 + v174:0, 1, v126:0, v127:0, v128:0, 0, 3, 4) -> f_189(v121:0, v122:0, v123:0, v174:0, 1, v145:0, v127:0, v128:0, 0, 3, 4) :|: v123:0 > 1 && v174:0 > -1 && v145:0 > 0 16.45/5.32 f_67(v1:0, v2:0, v3:0, 3, 1) -> f_190(v1:0, v5:0, v108:0, v116:0, 1, 0, v2:0, 3 + v5:0, 3, 4) :|: v5:0 > 0 && v2:0 > 3 && v116:0 > -1 16.45/5.32 f_189(v121:0, v122:0, v123:0, v129:0, 1, v126:0, v127:0, v128:0, 0, 3, 4) -> f_200(v121:0, v122:0, v123:0, 0, v126:0, 1, v127:0, v128:0, 3, 4) :|: v129:0 < 1 16.45/5.32 f_67(v1:0, v2:0, v3:0, 3, 1) -> f_189(v1:0, v5:0, 1 + v10:0, v10:0, 1, v9:0, v2:0, 3 + v5:0, 0, 3, 4) :|: v5:0 > 0 && v2:0 > 3 && v10:0 > -1 && v9:0 < 0 16.45/5.32 f_67(v1:0, v2:0, v3:0, 3, 1) -> f_189(v1:0, v5:0, 1 + v10:0, v10:0, 1, v9:0, v2:0, 3 + v5:0, 0, 3, 4) :|: v5:0 > 0 && v2:0 > 3 && v10:0 > -1 && v9:0 > 0 16.45/5.32 f_190(v106:0, v107:0, v108:0, 1 + v116:1, 1, 0, v112:0, v113:0, 3, 4) -> f_190(v106:0, v107:0, v108:1, v116:1, 1, 0, v112:0, v113:0, 3, 4) :|: v108:0 > 1 && v116:1 > -1 16.45/5.32 f_190(v106:0, v107:0, v108:0, 1 + v174:0, 1, 0, v112:0, v113:0, 3, 4) -> f_189(v106:0, v107:0, v108:0, v174:0, 1, v146:0, v112:0, v113:0, 0, 3, 4) :|: v108:0 > 1 && v174:0 > -1 && v146:0 < 0 16.45/5.32 f_190(v106:0, v107:0, v108:0, 1 + v174:0, 1, 0, v112:0, v113:0, 3, 4) -> f_189(v106:0, v107:0, v108:0, v174:0, 1, v146:0, v112:0, v113:0, 0, 3, 4) :|: v108:0 > 1 && v174:0 > -1 && v146:0 > 0 16.45/5.32 f_67(v1:0, v2:0, v3:0, 3, 1) -> f_79(v1:0, v5:0, v7:0, 0, v2:0, 3 + v5:0, 3, 1, 4) :|: v5:0 > 0 && v2:0 > 3 && v7:0 < 1 16.45/5.32 f_189(v121:0, v122:0, v123:0, 1 + v116:0, 1, v126:0, v127:0, v128:0, 0, 3, 4) -> f_190(v121:0, v122:0, v108:0, v116:0, 1, 0, v127:0, v128:0, 3, 4) :|: v123:0 > 1 && v116:0 > -1 16.45/5.32 Filtered unneeded arguments: 16.45/5.32 f_190(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10) -> f_190(x3, x4) 16.45/5.32 f_189(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11) -> f_189(x3, x4) 16.45/5.32 Removed division, modulo operations, cleaned up constraints. Obtained 9 rules.P rules: 16.45/5.32 f_190(v108:0, v116:0) -> f_202(v106:0, v107:0, v108:0, 0, v112:0, v113:0, 3, 1, 4) :|: v116:0 < 1 16.45/5.32 f_189(v123:0, sum~cons_1~v174:0) -> f_189(v123:0, v174:0) :|: v123:0 > 1 && v174:0 > -1 && sum~cons_1~v174:0 = 1 + v174:0 16.45/5.32 f_67(v1:0, v2:0, v3:0, cons_3, cons_1) -> f_190(v108:0, v116:0) :|: v2:0 > 3 && v116:0 > -1 && cons_3 = 3 && cons_1 = 1 16.45/5.32 f_189(v123:0, v129:0) -> f_200(v121:0, v122:0, v123:0, 0, v126:0, 1, v127:0, v128:0, 3, 4) :|: v129:0 < 1 16.45/5.32 f_67(v1:0, v2:0, v3:0, cons_3, cons_1) -> f_189(1 + v10:0, v10:0) :|: v2:0 > 3 && v10:0 > -1 && cons_3 = 3 && cons_1 = 1 16.45/5.32 f_190(v108:0, sum~cons_1~v116:1) -> f_190(v108:1, v116:1) :|: v108:0 > 1 && v116:1 > -1 && sum~cons_1~v116:1 = 1 + v116:1 16.45/5.32 f_190(v108:0, sum~cons_1~v174:0) -> f_189(v108:0, v174:0) :|: v108:0 > 1 && v174:0 > -1 && sum~cons_1~v174:0 = 1 + v174:0 16.45/5.32 f_67(v1:0, v2:0, v3:0, cons_3, cons_1) -> f_79(v1:0, v5:0, v7:0, 0, v2:0, 3 + v5:0, 3, 1, 4) :|: v2:0 > 3 && v7:0 < 1 && v5:0 > 0 && cons_3 = 3 && cons_1 = 1 16.45/5.32 f_189(v123:0, sum~cons_1~v116:0) -> f_190(v108:0, v116:0) :|: v123:0 > 1 && v116:0 > -1 && sum~cons_1~v116:0 = 1 + v116:0 16.45/5.32 16.45/5.32 ---------------------------------------- 16.45/5.32 16.45/5.32 (6) 16.45/5.32 Obligation: 16.45/5.32 Rules: 16.45/5.32 f_190(v108:0, v116:0) -> f_202(v106:0, v107:0, v108:0, 0, v112:0, v113:0, 3, 1, 4) :|: v116:0 < 1 16.45/5.32 f_189(v123:0, sum~cons_1~v174:0) -> f_189(v123:0, v174:0) :|: v123:0 > 1 && v174:0 > -1 && sum~cons_1~v174:0 = 1 + v174:0 16.45/5.32 f_67(x, x1, x2, x3, x4) -> f_190(x5, x6) :|: x1 > 3 && x6 > -1 && x3 = 3 && x4 = 1 16.45/5.32 f_189(x7, x8) -> f_200(x9, x10, x7, 0, x11, 1, x12, x13, 3, 4) :|: x8 < 1 16.45/5.32 f_67(v1:0, v2:0, v3:0, cons_3, cons_1) -> f_189(1 + v10:0, v10:0) :|: v2:0 > 3 && v10:0 > -1 && cons_3 = 3 && cons_1 = 1 16.45/5.32 f_190(x14, x15) -> f_190(x16, x17) :|: x14 > 1 && x17 > -1 && x15 = 1 + x17 16.45/5.32 f_190(x18, x19) -> f_189(x18, x20) :|: x18 > 1 && x20 > -1 && x19 = 1 + x20 16.45/5.32 f_67(x21, x22, x23, x24, x25) -> f_79(x21, x26, x27, 0, x22, 3 + x26, 3, 1, 4) :|: x22 > 3 && x27 < 1 && x26 > 0 && x24 = 3 && x25 = 1 16.45/5.32 f_189(x28, x29) -> f_190(x30, x31) :|: x28 > 1 && x31 > -1 && x29 = 1 + x31 16.45/5.32 Start term: f_67(v1, v2, v3, 3, 1) 16.45/5.32 16.45/5.32 ---------------------------------------- 16.45/5.32 16.45/5.32 (7) IRS2T2 (EQUIVALENT) 16.45/5.32 Transformed input IRS into an integer transition system.Used the following mapping from defined symbols to location IDs: 16.45/5.32 16.45/5.32 (f_190_10,1) 16.45/5.32 (f_202_10,2) 16.45/5.32 (f_189_10,3) 16.45/5.32 (f_67_10,4) 16.45/5.32 (f_200_10,5) 16.45/5.32 (f_79_10,6) 16.45/5.32 16.45/5.32 ---------------------------------------- 16.45/5.32 16.45/5.32 (8) 16.45/5.32 Obligation: 16.45/5.32 START: 4; 16.45/5.32 16.45/5.32 FROM: 1; 16.45/5.32 oldX0 := x0; 16.45/5.32 oldX1 := x1; 16.45/5.32 oldX2 := x2; 16.45/5.32 oldX3 := x3; 16.45/5.32 oldX4 := x4; 16.45/5.32 oldX5 := x5; 16.45/5.32 oldX6 := x6; 16.45/5.32 oldX7 := x7; 16.45/5.32 oldX8 := x8; 16.45/5.32 oldX9 := x9; 16.45/5.32 oldX10 := nondet(); 16.45/5.32 oldX11 := nondet(); 16.45/5.32 oldX12 := nondet(); 16.45/5.32 oldX13 := nondet(); 16.45/5.32 oldX14 := nondet(); 16.45/5.32 assume(oldX1 < 1); 16.45/5.32 x0 := oldX10; 16.45/5.32 x1 := oldX11; 16.45/5.32 x2 := oldX0; 16.45/5.32 x3 := 0; 16.45/5.32 x4 := oldX12; 16.45/5.32 x5 := oldX13; 16.45/5.32 x6 := 3; 16.45/5.32 x7 := 1; 16.45/5.32 x8 := 4; 16.45/5.32 x9 := oldX14; 16.45/5.32 TO: 2; 16.45/5.32 16.45/5.32 FROM: 3; 16.45/5.32 oldX0 := x0; 16.45/5.32 oldX1 := x1; 16.45/5.32 oldX2 := x2; 16.45/5.32 oldX3 := x3; 16.45/5.32 oldX4 := x4; 16.45/5.32 oldX5 := x5; 16.45/5.32 oldX6 := x6; 16.45/5.32 oldX7 := x7; 16.45/5.32 oldX8 := x8; 16.45/5.32 oldX9 := x9; 16.45/5.32 oldX10 := oldX1 - 1; 16.45/5.32 oldX11 := nondet(); 16.45/5.32 oldX12 := nondet(); 16.45/5.32 oldX13 := nondet(); 16.45/5.32 oldX14 := nondet(); 16.45/5.32 oldX15 := nondet(); 16.45/5.32 oldX16 := nondet(); 16.45/5.32 oldX17 := nondet(); 16.45/5.32 oldX18 := nondet(); 16.45/5.32 assume(oldX0 > 1 && oldX10 > -1 && oldX1 = 1 + oldX10); 16.45/5.32 x0 := oldX0; 16.45/5.32 x1 := oldX1 - 1; 16.45/5.32 x2 := oldX11; 16.45/5.32 x3 := oldX12; 16.45/5.32 x4 := oldX13; 16.45/5.32 x5 := oldX14; 16.45/5.32 x6 := oldX15; 16.45/5.32 x7 := oldX16; 16.45/5.32 x8 := oldX17; 16.45/5.32 x9 := oldX18; 16.45/5.32 TO: 3; 16.45/5.32 16.45/5.32 FROM: 4; 16.45/5.32 oldX0 := x0; 16.45/5.32 oldX1 := x1; 16.45/5.32 oldX2 := x2; 16.45/5.32 oldX3 := x3; 16.45/5.32 oldX4 := x4; 16.45/5.32 oldX5 := x5; 16.45/5.32 oldX6 := x6; 16.45/5.32 oldX7 := x7; 16.45/5.32 oldX8 := x8; 16.45/5.32 oldX9 := x9; 16.45/5.32 oldX10 := nondet(); 16.45/5.32 oldX11 := nondet(); 16.45/5.32 oldX12 := nondet(); 16.45/5.32 oldX13 := nondet(); 16.45/5.32 oldX14 := nondet(); 16.45/5.32 oldX15 := nondet(); 16.45/5.32 oldX16 := nondet(); 16.45/5.32 oldX17 := nondet(); 16.45/5.32 oldX18 := nondet(); 16.45/5.32 oldX19 := nondet(); 16.45/5.32 assume(oldX1 > 3 && oldX11 > -1 && oldX3 = 3 && oldX4 = 1); 16.45/5.32 x0 := oldX10; 16.45/5.32 x1 := oldX11; 16.45/5.32 x2 := oldX12; 16.45/5.32 x3 := oldX13; 16.45/5.32 x4 := oldX14; 16.45/5.32 x5 := oldX15; 16.45/5.32 x6 := oldX16; 16.45/5.32 x7 := oldX17; 16.45/5.32 x8 := oldX18; 16.45/5.32 x9 := oldX19; 16.45/5.32 TO: 1; 16.45/5.32 16.45/5.32 FROM: 3; 16.45/5.32 oldX0 := x0; 16.45/5.32 oldX1 := x1; 16.45/5.32 oldX2 := x2; 16.45/5.32 oldX3 := x3; 16.45/5.32 oldX4 := x4; 16.45/5.32 oldX5 := x5; 16.45/5.32 oldX6 := x6; 16.45/5.32 oldX7 := x7; 16.45/5.32 oldX8 := x8; 16.45/5.32 oldX9 := x9; 16.45/5.32 oldX10 := nondet(); 16.45/5.32 oldX11 := nondet(); 16.45/5.32 oldX12 := nondet(); 16.45/5.32 oldX13 := nondet(); 16.45/5.32 oldX14 := nondet(); 16.45/5.32 assume(oldX1 < 1); 16.45/5.32 x0 := oldX10; 16.45/5.32 x1 := oldX11; 16.45/5.32 x2 := oldX0; 16.45/5.32 x3 := 0; 16.45/5.32 x4 := oldX12; 16.45/5.32 x5 := 1; 16.45/5.32 x6 := oldX13; 16.45/5.32 x7 := oldX14; 16.45/5.32 x8 := 3; 16.45/5.32 x9 := 4; 16.45/5.32 TO: 5; 16.45/5.32 16.45/5.32 FROM: 4; 16.45/5.32 oldX0 := x0; 16.45/5.32 oldX1 := x1; 16.45/5.32 oldX2 := x2; 16.45/5.32 oldX3 := x3; 16.45/5.32 oldX4 := x4; 16.45/5.32 oldX5 := x5; 16.45/5.32 oldX6 := x6; 16.45/5.32 oldX7 := x7; 16.45/5.32 oldX8 := x8; 16.45/5.32 oldX9 := x9; 16.45/5.32 oldX10 := nondet(); 16.45/5.32 oldX11 := nondet(); 16.45/5.32 oldX12 := nondet(); 16.45/5.32 oldX13 := nondet(); 16.45/5.32 oldX14 := nondet(); 16.45/5.32 oldX15 := nondet(); 16.45/5.32 oldX16 := nondet(); 16.45/5.32 oldX17 := nondet(); 16.45/5.32 oldX18 := nondet(); 16.45/5.32 assume(oldX1 > 3 && oldX10 > -1 && oldX3 = 3 && oldX4 = 1); 16.45/5.32 x0 := 1 + oldX10; 16.45/5.32 x1 := oldX10; 16.45/5.32 x2 := oldX11; 16.45/5.32 x3 := oldX12; 16.45/5.32 x4 := oldX13; 16.45/5.32 x5 := oldX14; 16.45/5.32 x6 := oldX15; 16.45/5.32 x7 := oldX16; 16.45/5.32 x8 := oldX17; 16.45/5.32 x9 := oldX18; 16.45/5.32 TO: 3; 16.45/5.32 16.45/5.32 FROM: 1; 16.45/5.32 oldX0 := x0; 16.45/5.32 oldX1 := x1; 16.45/5.32 oldX2 := x2; 16.45/5.32 oldX3 := x3; 16.45/5.32 oldX4 := x4; 16.45/5.32 oldX5 := x5; 16.45/5.32 oldX6 := x6; 16.45/5.32 oldX7 := x7; 16.45/5.32 oldX8 := x8; 16.45/5.32 oldX9 := x9; 16.45/5.32 oldX11 := oldX1 - 1; 16.45/5.32 oldX10 := nondet(); 16.45/5.32 oldX12 := nondet(); 16.45/5.32 oldX13 := nondet(); 16.45/5.32 oldX14 := nondet(); 16.45/5.32 oldX15 := nondet(); 16.45/5.32 oldX16 := nondet(); 16.45/5.32 oldX17 := nondet(); 16.45/5.32 oldX18 := nondet(); 16.45/5.32 oldX19 := nondet(); 16.45/5.32 assume(oldX0 > 1 && oldX11 > -1 && oldX1 = 1 + oldX11); 16.45/5.32 x0 := oldX10; 16.45/5.32 x1 := oldX1 - 1; 16.45/5.32 x2 := oldX12; 16.45/5.32 x3 := oldX13; 16.45/5.32 x4 := oldX14; 16.45/5.32 x5 := oldX15; 16.45/5.32 x6 := oldX16; 16.45/5.32 x7 := oldX17; 16.45/5.32 x8 := oldX18; 16.45/5.32 x9 := oldX19; 16.45/5.32 TO: 1; 16.45/5.32 16.45/5.32 FROM: 1; 16.45/5.32 oldX0 := x0; 16.45/5.32 oldX1 := x1; 16.45/5.32 oldX2 := x2; 16.45/5.32 oldX3 := x3; 16.45/5.32 oldX4 := x4; 16.45/5.32 oldX5 := x5; 16.45/5.32 oldX6 := x6; 16.45/5.32 oldX7 := x7; 16.45/5.32 oldX8 := x8; 16.45/5.32 oldX9 := x9; 16.45/5.32 oldX10 := oldX1 - 1; 16.45/5.32 oldX11 := nondet(); 16.45/5.32 oldX12 := nondet(); 16.45/5.32 oldX13 := nondet(); 16.45/5.32 oldX14 := nondet(); 16.45/5.32 oldX15 := nondet(); 16.45/5.32 oldX16 := nondet(); 16.45/5.32 oldX17 := nondet(); 16.45/5.32 oldX18 := nondet(); 16.45/5.32 assume(oldX0 > 1 && oldX10 > -1 && oldX1 = 1 + oldX10); 16.45/5.32 x0 := oldX0; 16.45/5.32 x1 := oldX1 - 1; 16.45/5.32 x2 := oldX11; 16.45/5.32 x3 := oldX12; 16.45/5.32 x4 := oldX13; 16.45/5.32 x5 := oldX14; 16.45/5.32 x6 := oldX15; 16.45/5.32 x7 := oldX16; 16.45/5.32 x8 := oldX17; 16.45/5.32 x9 := oldX18; 16.45/5.32 TO: 3; 16.45/5.32 16.45/5.32 FROM: 4; 16.45/5.32 oldX0 := x0; 16.45/5.32 oldX1 := x1; 16.45/5.32 oldX2 := x2; 16.45/5.32 oldX3 := x3; 16.45/5.32 oldX4 := x4; 16.45/5.32 oldX5 := x5; 16.45/5.32 oldX6 := x6; 16.45/5.32 oldX7 := x7; 16.45/5.32 oldX8 := x8; 16.45/5.32 oldX9 := x9; 16.45/5.32 oldX10 := nondet(); 16.45/5.32 oldX11 := nondet(); 16.45/5.32 oldX12 := nondet(); 16.45/5.32 assume(oldX1 > 3 && oldX11 < 1 && oldX10 > 0 && oldX3 = 3 && oldX4 = 1); 16.45/5.32 x0 := oldX0; 16.45/5.32 x1 := oldX10; 16.45/5.32 x2 := oldX11; 16.45/5.32 x3 := 0; 16.45/5.32 x4 := oldX1; 16.45/5.32 x5 := 3 + oldX10; 16.45/5.32 x6 := 3; 16.45/5.32 x7 := 1; 16.45/5.32 x8 := 4; 16.45/5.32 x9 := oldX12; 16.45/5.32 TO: 6; 16.45/5.32 16.45/5.32 FROM: 3; 16.45/5.32 oldX0 := x0; 16.45/5.32 oldX1 := x1; 16.45/5.32 oldX2 := x2; 16.45/5.32 oldX3 := x3; 16.45/5.32 oldX4 := x4; 16.45/5.32 oldX5 := x5; 16.45/5.32 oldX6 := x6; 16.45/5.32 oldX7 := x7; 16.45/5.32 oldX8 := x8; 16.45/5.32 oldX9 := x9; 16.45/5.32 oldX11 := oldX1 - 1; 16.45/5.32 oldX10 := nondet(); 16.45/5.32 oldX12 := nondet(); 16.45/5.32 oldX13 := nondet(); 16.45/5.32 oldX14 := nondet(); 16.45/5.32 oldX15 := nondet(); 16.45/5.32 oldX16 := nondet(); 16.45/5.32 oldX17 := nondet(); 16.45/5.32 oldX18 := nondet(); 16.45/5.32 oldX19 := nondet(); 16.45/5.32 assume(oldX0 > 1 && oldX11 > -1 && oldX1 = 1 + oldX11); 16.45/5.32 x0 := oldX10; 16.45/5.32 x1 := oldX1 - 1; 16.45/5.32 x2 := oldX12; 16.45/5.32 x3 := oldX13; 16.45/5.32 x4 := oldX14; 16.45/5.32 x5 := oldX15; 16.45/5.32 x6 := oldX16; 16.45/5.32 x7 := oldX17; 16.45/5.32 x8 := oldX18; 16.45/5.32 x9 := oldX19; 16.45/5.32 TO: 1; 16.45/5.32 16.45/5.32 16.45/5.32 ---------------------------------------- 16.45/5.32 16.45/5.32 (9) T2 (EQUIVALENT) 16.45/5.32 Initially, performed program simplifications using lexicographic rank functions: 16.45/5.32 * Removed transitions 12, 15, 16, 21, 25, 26 using the following rank functions: 16.45/5.32 - Rank function 1: 16.45/5.32 RF for loc. 9: 1+2*x1 16.45/5.32 RF for loc. 10: 1+2*x1 16.45/5.32 RF for loc. 11: 2*x1 16.45/5.32 RF for loc. 15: 2*x1 16.45/5.32 Bound for (chained) transitions 15: 2 16.45/5.32 Bound for (chained) transitions 16: 2 16.45/5.32 Bound for (chained) transitions 25: 2 16.45/5.32 Bound for (chained) transitions 26: 2 16.45/5.32 - Rank function 2: 16.45/5.32 RF for loc. 9: 1 16.45/5.32 RF for loc. 10: 1 16.45/5.32 RF for loc. 11: 0 16.45/5.32 RF for loc. 15: 0 16.45/5.32 Bound for (chained) transitions 12: 1 16.45/5.32 - Rank function 3: 16.45/5.32 RF for loc. 10: 0 16.45/5.32 RF for loc. 15: -1 16.45/5.32 Bound for (chained) transitions 21: 0 16.45/5.32 16.45/5.32 ---------------------------------------- 16.45/5.32 16.45/5.32 (10) 16.45/5.32 YES 16.82/9.75 EOF