/export/starexec/sandbox2/solver/bin/starexec_run_c /export/starexec/sandbox2/benchmark/theBenchmark.c /export/starexec/sandbox2/output/output_files -------------------------------------------------------------------------------- NO proof of /export/starexec/sandbox2/benchmark/theBenchmark.c # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty Termination of the given C Problem could be disproven: (0) C Problem (1) CToLLVMProof [EQUIVALENT, 177 ms] (2) LLVM problem (3) LLVMToTerminationGraphProof [EQUIVALENT, 990 ms] (4) LLVM Symbolic Execution Graph (5) SymbolicExecutionGraphToLassoProof [COMPLETE, 0 ms] (6) AND (7) LLVM Symbolic Execution Lasso (8) Lasso2IRS [EQUIVALENT, 65 ms] (9) IntTRS (10) IRS2T2 [EQUIVALENT, 0 ms] (11) T2IntSys (12) LLVM Symbolic Execution Lasso (13) Lasso2IRS [EQUIVALENT, 63 ms] (14) IntTRS (15) IRS2T2 [EQUIVALENT, 0 ms] (16) T2IntSys (17) LLVM Symbolic Execution Lasso (18) Lasso2IRS [EQUIVALENT, 81 ms] (19) IntTRS (20) IRS2T2 [EQUIVALENT, 5 ms] (21) T2IntSys (22) LLVM Symbolic Execution Lasso (23) Lasso2IRS [EQUIVALENT, 87 ms] (24) IntTRS (25) IRS2T2 [EQUIVALENT, 0 ms] (26) T2IntSys (27) LLVM Symbolic Execution Lasso (28) Lasso2IRS [EQUIVALENT, 33 ms] (29) IntTRS (30) IRS2T2 [EQUIVALENT, 0 ms] (31) T2IntSys (32) LLVM Symbolic Execution Lasso (33) Lasso2IRS [EQUIVALENT, 30 ms] (34) IntTRS (35) IRS2T2 [EQUIVALENT, 0 ms] (36) T2IntSys (37) T2 [COMPLETE, 762 ms] (38) NO ---------------------------------------- (0) Obligation: c file /export/starexec/sandbox2/benchmark/theBenchmark.c ---------------------------------------- (1) CToLLVMProof (EQUIVALENT) Compiled c-file /export/starexec/sandbox2/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: true visibilityType: DEFAULT callingConvention: ccc *BasicFunctionTypename: "main" linkageType: EXTERNALLY_VISIBLE returnParam: i32 parameters: () variableLength: false visibilityType: DEFAULT callingConvention: ccc 0: %1 = alloca i32, align 4 %x = alloca i32, align 4 store 0, %1 %2 = call i32 (...)* @__VERIFIER_nondet_int() store %2, %x br %3 3: %4 = load %x %5 = icmp sge %4 0 br %5, %6, %16 6: %7 = call i32 (...)* @__VERIFIER_nondet_int() %8 = icmp ne %7 0 br %8, %9, %12 9: %10 = load %x %11 = sub %10 1 store %11, %x br %15 12: %13 = load %x %14 = add %13 1 store %14, %x br %15 15: br %3 16: ret 0 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 (COMPLETE) Converted SEGraph to 6 dependent lassos. ---------------------------------------- (6) Complex Obligation (AND) ---------------------------------------- (7) Obligation: Lasso ---------------------------------------- (8) Lasso2IRS (EQUIVALENT) Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: Generated rules. Obtained 76 rulesP rules: f_267(v404, v405, v406, v407, 1, v409, v410, v411, v412, v413, v414, 0, 3, 4) -> f_269(v404, v405, v406, v412, 1, v409, v410, v411, v407, v413, v414, 0, 3, 4) :|: 0 = 0 f_269(v404, v405, v406, v412, 1, v409, v410, v411, v407, v413, v414, 0, 3, 4) -> f_271(v404, v405, v406, v412, 1, v409, v410, v411, v407, v413, v414, 0, 3, 4) :|: 0 <= v412 && 1 <= v407 f_271(v404, v405, v406, v412, 1, v409, v410, v411, v407, v413, v414, 0, 3, 4) -> f_274(v404, v405, v406, v412, 1, v409, v410, v411, v407, v413, v414, 0, 3, 4) :|: 0 = 0 f_274(v404, v405, v406, v412, 1, v409, v410, v411, v407, v413, v414, 0, 3, 4) -> f_277(v404, v405, v406, v412, 1, v409, v410, v411, v407, v413, v414, 0, 3, 4) :|: TRUE f_277(v404, v405, v406, v412, 1, v409, v410, v411, v407, v413, v414, 0, 3, 4) -> f_280(v404, v405, v406, v412, 1, v513, v410, v411, v407, v413, v414, 0, 3, 4) :|: TRUE f_280(v404, v405, v406, v412, 1, v513, v410, v411, v407, v413, v414, 0, 3, 4) -> f_283(v404, v405, v406, v412, 1, v513, v410, v411, v407, v413, v414, 0, 3, 4) :|: v513 != 0 f_280(v404, v405, v406, v412, 1, v513, v410, v411, v407, v413, v414, 0, 3, 4) -> f_284(v404, v405, v406, v412, 1, 0, v410, v411, v407, v413, v414, 3, 4) :|: v513 = 0 f_283(v404, v405, v406, v412, 1, v513, v410, v411, v407, v413, v414, 0, 3, 4) -> f_287(v404, v405, v406, v412, 1, v513, v410, v411, v407, v413, v414, 0, 3, 4) :|: 0 = 0 f_287(v404, v405, v406, v412, 1, v513, v410, v411, v407, v413, v414, 0, 3, 4) -> f_291(v404, v405, v406, v412, 1, v513, v410, v411, v407, v413, v414, 0, 3, 4) :|: TRUE f_291(v404, v405, v406, v412, 1, v513, v410, v411, v407, v413, v414, 0, 3, 4) -> f_295(v404, v405, v406, v412, 1, v513, v410, v411, v413, v414, 0, 3, 4) :|: 0 = 0 f_295(v404, v405, v406, v412, 1, v513, v410, v411, v413, v414, 0, 3, 4) -> f_299(v404, v405, v406, v412, 1, v513, v410, v411, v549, v413, v414, 0, 3, 4) :|: 1 + v549 = v412 && 0 <= 1 + v549 f_299(v404, v405, v406, v412, 1, v513, v410, v411, v549, v413, v414, 0, 3, 4) -> f_303(v404, v405, v406, v412, 1, v513, v410, v411, v549, v413, v414, 0, 3, 4) :|: TRUE f_303(v404, v405, v406, v412, 1, v513, v410, v411, v549, v413, v414, 0, 3, 4) -> f_307(v404, v405, v406, v412, 1, v513, v410, v411, v549, v413, v414, 0, 3, 4) :|: TRUE f_307(v404, v405, v406, v412, 1, v513, v410, v411, v549, v413, v414, 0, 3, 4) -> f_264(v404, v405, v406, v412, 1, v513, v410, v411, v549, v413, v414, 0, 3, 4) :|: TRUE f_264(v404, v405, v406, v407, 1, v409, v410, v411, v412, v413, v414, 0, 3, 4) -> f_267(v404, v405, v406, v407, 1, v409, v410, v411, v412, v413, v414, 0, 3, 4) :|: TRUE f_284(v404, v405, v406, v412, 1, 0, v410, v411, v407, v413, v414, 3, 4) -> f_288(v404, v405, v406, v412, 1, 0, v410, v411, v407, v413, v414, 3, 4) :|: 0 = 0 f_288(v404, v405, v406, v412, 1, 0, v410, v411, v407, v413, v414, 3, 4) -> f_292(v404, v405, v406, v412, 1, 0, v410, v411, v407, v413, v414, 3, 4) :|: TRUE f_292(v404, v405, v406, v412, 1, 0, v410, v411, v407, v413, v414, 3, 4) -> f_296(v404, v405, v406, v412, 1, 0, v411, v407, v413, v414, 3, 4) :|: 0 = 0 f_296(v404, v405, v406, v412, 1, 0, v411, v407, v413, v414, 3, 4) -> f_300(v404, v405, v406, v412, 1, 0, v407, v413, v414, 3, 4) :|: v407 = 1 + v412 f_300(v404, v405, v406, v412, 1, 0, v407, v413, v414, 3, 4) -> f_304(v404, v405, v406, v412, 1, 0, v407, v413, v414, 3, 4) :|: TRUE f_304(v404, v405, v406, v412, 1, 0, v407, v413, v414, 3, 4) -> f_308(v404, v405, v406, v412, 1, 0, v407, v413, v414, 3, 4) :|: TRUE f_308(v404, v405, v406, v412, 1, 0, v407, v413, v414, 3, 4) -> f_266(v404, v405, v406, v412, 1, 0, v407, v412, v407, v413, v414, 3, 4) :|: TRUE f_266(v442, v443, v444, v445, 1, 0, v448, v449, v450, v451, v452, 3, 4) -> f_268(v442, v443, v444, v445, 1, 0, v448, v449, v450, v451, v452, 3, 4) :|: TRUE f_268(v442, v443, v444, v445, 1, 0, v448, v449, v450, v451, v452, 3, 4) -> f_270(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) :|: 0 = 0 f_270(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) -> f_273(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) :|: 0 = 0 f_273(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) -> f_276(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) :|: TRUE f_276(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) -> f_279(v442, v443, v444, v450, 1, v512, 0, v448, v449, v445, v451, v452, 3, 4) :|: TRUE f_279(v442, v443, v444, v450, 1, v512, 0, v448, v449, v445, v451, v452, 3, 4) -> f_281(v442, v443, v444, v450, 1, v512, 0, v448, v449, v445, v451, v452, 3, 4) :|: v512 != 0 f_279(v442, v443, v444, v450, 1, v512, 0, v448, v449, v445, v451, v452, 3, 4) -> f_282(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) :|: v512 = 0 f_281(v442, v443, v444, v450, 1, v512, 0, v448, v449, v445, v451, v452, 3, 4) -> f_285(v442, v443, v444, v450, 1, v512, v448, v449, v445, v451, v452, 0, 3, 4) :|: 0 = 0 f_285(v442, v443, v444, v450, 1, v512, v448, v449, v445, v451, v452, 0, 3, 4) -> f_289(v442, v443, v444, v450, 1, v512, v448, v449, v445, v451, v452, 0, 3, 4) :|: TRUE f_289(v442, v443, v444, v450, 1, v512, v448, v449, v445, v451, v452, 0, 3, 4) -> f_293(v442, v443, v444, v450, 1, v512, v449, v445, v451, v452, 0, 3, 4) :|: 0 = 0 f_293(v442, v443, v444, v450, 1, v512, v449, v445, v451, v452, 0, 3, 4) -> f_297(v442, v443, v444, v450, 1, v512, v445, v451, v452, 0, 3, 4) :|: 1 + v445 = v450 f_297(v442, v443, v444, v450, 1, v512, v445, v451, v452, 0, 3, 4) -> f_301(v442, v443, v444, v450, 1, v512, v445, v451, v452, 0, 3, 4) :|: TRUE f_301(v442, v443, v444, v450, 1, v512, v445, v451, v452, 0, 3, 4) -> f_305(v442, v443, v444, v450, 1, v512, v445, v451, v452, 0, 3, 4) :|: TRUE f_305(v442, v443, v444, v450, 1, v512, v445, v451, v452, 0, 3, 4) -> f_264(v442, v443, v444, v450, 1, v512, v445, v450, v445, v451, v452, 0, 3, 4) :|: TRUE f_282(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) -> f_286(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) :|: 0 = 0 f_286(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) -> f_290(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) :|: TRUE f_290(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) -> f_294(v442, v443, v444, v450, 1, 0, v448, v449, v451, v452, 3, 4) :|: 0 = 0 f_294(v442, v443, v444, v450, 1, 0, v448, v449, v451, v452, 3, 4) -> f_298(v442, v443, v444, v450, 1, 0, v448, v449, v548, v451, v452, 3, 4, 2) :|: v548 = 1 + v450 && 2 <= v548 f_298(v442, v443, v444, v450, 1, 0, v448, v449, v548, v451, v452, 3, 4, 2) -> f_302(v442, v443, v444, v450, 1, 0, v448, v449, v548, v451, v452, 3, 4, 2) :|: TRUE f_302(v442, v443, v444, v450, 1, 0, v448, v449, v548, v451, v452, 3, 4, 2) -> f_306(v442, v443, v444, v450, 1, 0, v448, v449, v548, v451, v452, 3, 4, 2) :|: TRUE f_306(v442, v443, v444, v450, 1, 0, v448, v449, v548, v451, v452, 3, 4, 2) -> f_266(v442, v443, v444, v450, 1, 0, v448, v449, v548, v451, v452, 3, 4) :|: TRUE f_69 -> f_70(v1, v2, 3, 1, 4) :|: 1 <= v1 && v2 = 3 + v1 && 4 <= v2 f_70(v1, v2, 3, 1, 4) -> f_71(v1, v3, v2, v4, 3, 1, 4) :|: 1 <= v3 && v4 = 3 + v3 && 4 <= v4 f_71(v1, v3, v2, v4, 3, 1, 4) -> f_72(v1, v3, v2, v4, 0, 3, 1, 4) :|: TRUE f_72(v1, v3, v2, v4, 0, 3, 1, 4) -> f_73(v1, v3, v5, v2, v4, 0, 3, 1, 4) :|: TRUE f_73(v1, v3, v5, v2, v4, 0, 3, 1, 4) -> f_74(v1, v3, v5, v2, v4, 0, 3, 1, 4) :|: TRUE f_74(v1, v3, v5, v2, v4, 0, 3, 1, 4) -> f_75(v1, v3, v5, v2, v4, 0, 3, 1, 4) :|: TRUE f_75(v1, v3, v5, v2, v4, 0, 3, 1, 4) -> f_76(v1, v3, v5, v2, v4, 0, 3, 1, 4) :|: 0 = 0 f_76(v1, v3, v5, v2, v4, 0, 3, 1, 4) -> f_77(v1, v3, v5, v2, v4, 0, 3, 1, 4) :|: 0 <= v5 f_77(v1, v3, v5, v2, v4, 0, 3, 1, 4) -> f_79(v1, v3, v5, 1, v2, v4, 0, 3, 4) :|: 0 = 0 f_79(v1, v3, v5, 1, v2, v4, 0, 3, 4) -> f_81(v1, v3, v5, 1, v2, v4, 0, 3, 4) :|: TRUE f_81(v1, v3, v5, 1, v2, v4, 0, 3, 4) -> f_83(v1, v3, v5, 1, v7, v2, v4, 0, 3, 4) :|: TRUE f_83(v1, v3, v5, 1, v7, v2, v4, 0, 3, 4) -> f_85(v1, v3, v5, 1, 0, v2, v4, 3, 4) :|: v7 = 0 f_85(v1, v3, v5, 1, 0, v2, v4, 3, 4) -> f_87(v1, v3, v5, 1, 0, v2, v4, 3, 4) :|: 0 = 0 f_87(v1, v3, v5, 1, 0, v2, v4, 3, 4) -> f_89(v1, v3, v5, 1, 0, v2, v4, 3, 4) :|: TRUE f_89(v1, v3, v5, 1, 0, v2, v4, 3, 4) -> f_91(v1, v3, v5, 1, 0, v2, v4, 3, 4) :|: 0 = 0 f_91(v1, v3, v5, 1, 0, v2, v4, 3, 4) -> f_93(v1, v3, v5, 1, 0, v9, v2, v4, 3, 4) :|: v9 = 1 + v5 && 1 <= v9 f_93(v1, v3, v5, 1, 0, v9, v2, v4, 3, 4) -> f_95(v1, v3, v5, 1, 0, v9, v2, v4, 3, 4) :|: TRUE f_95(v1, v3, v5, 1, 0, v9, v2, v4, 3, 4) -> f_97(v1, v3, v5, 1, 0, v9, v2, v4, 3, 4) :|: TRUE f_97(v1, v3, v5, 1, 0, v9, v2, v4, 3, 4) -> f_138(v1, v3, v5, v5, 1, 0, v9, v2, v4, 3, 4) :|: TRUE f_138(v39, v40, v41, v42, 1, 0, v45, v46, v47, 3, 4) -> f_180(v39, v40, v41, v42, 1, 0, v45, v46, v47, 3, 4) :|: TRUE f_180(v112, v113, v114, v115, 1, 0, v118, v119, v120, 3, 4) -> f_183(v112, v113, v114, v115, 1, 0, v118, v119, v120, 3, 4) :|: TRUE f_183(v112, v113, v114, v115, 1, 0, v118, v119, v120, 3, 4) -> f_186(v112, v113, v114, v118, 1, 0, v115, v119, v120, 3, 4) :|: 0 = 0 f_186(v112, v113, v114, v118, 1, 0, v115, v119, v120, 3, 4) -> f_189(v112, v113, v114, v118, 1, 0, v115, v119, v120, 3, 4) :|: 0 = 0 f_189(v112, v113, v114, v118, 1, 0, v115, v119, v120, 3, 4) -> f_191(v112, v113, v114, v118, 1, 0, v115, v119, v120, 3, 4) :|: TRUE f_191(v112, v113, v114, v118, 1, 0, v115, v119, v120, 3, 4) -> f_194(v112, v113, v114, v118, 1, v167, 0, v115, v119, v120, 3, 4) :|: TRUE f_194(v112, v113, v114, v118, 1, v167, 0, v115, v119, v120, 3, 4) -> f_197(v112, v113, v114, v118, 1, v167, 0, v115, v119, v120, 3, 4) :|: v167 != 0 f_197(v112, v113, v114, v118, 1, v167, 0, v115, v119, v120, 3, 4) -> f_201(v112, v113, v114, v118, 1, v167, v115, v119, v120, 0, 3, 4) :|: 0 = 0 f_201(v112, v113, v114, v118, 1, v167, v115, v119, v120, 0, 3, 4) -> f_204(v112, v113, v114, v118, 1, v167, v115, v119, v120, 0, 3, 4) :|: TRUE f_204(v112, v113, v114, v118, 1, v167, v115, v119, v120, 0, 3, 4) -> f_208(v112, v113, v114, v118, 1, v167, v115, v119, v120, 0, 3, 4) :|: 0 = 0 f_208(v112, v113, v114, v118, 1, v167, v115, v119, v120, 0, 3, 4) -> f_212(v112, v113, v114, v118, 1, v167, v115, v119, v120, 0, 3, 4) :|: 1 + v115 = v118 f_212(v112, v113, v114, v118, 1, v167, v115, v119, v120, 0, 3, 4) -> f_216(v112, v113, v114, v118, 1, v167, v115, v119, v120, 0, 3, 4) :|: TRUE f_216(v112, v113, v114, v118, 1, v167, v115, v119, v120, 0, 3, 4) -> f_220(v112, v113, v114, v118, 1, v167, v115, v119, v120, 0, 3, 4) :|: TRUE f_220(v112, v113, v114, v118, 1, v167, v115, v119, v120, 0, 3, 4) -> f_264(v112, v113, v114, v118, 1, v167, v115, v118, v115, v119, v120, 0, 3, 4) :|: TRUE Combined rules. Obtained 8 rulesP rules: f_267(v404:0, v405:0, v406:0, v407:0, 1, v409:0, v410:0, v411:0, 1 + v549:0, v413:0, v414:0, 0, 3, 4) -> f_267(v404:0, v405:0, v406:0, 1 + v549:0, 1, v513:0, v410:0, v411:0, v549:0, v413:0, v414:0, 0, 3, 4) :|: v407:0 > 0 && v549:0 > -2 && v513:0 < 0 f_267(v404:0, v405:0, v406:0, v407:0, 1, v409:0, v410:0, v411:0, 1 + v549:0, v413:0, v414:0, 0, 3, 4) -> f_267(v404:0, v405:0, v406:0, 1 + v549:0, 1, v513:0, v410:0, v411:0, v549:0, v413:0, v414:0, 0, 3, 4) :|: v407:0 > 0 && v549:0 > -2 && v513:0 > 0 f_279(v442:0, v443:0, v444:0, v450:0, 1, 0, 0, v448:0, v449:0, v445:0, v451:0, v452:0, 3, 4) -> f_279(v442:0, v443:0, v444:0, 1 + v450:0, 1, v512:1, 0, v448:0, v449:0, v450:0, v451:0, v452:0, 3, 4) :|: v450:0 > 0 f_69 -> f_267(v1:0, v3:0, v5:0, 1 + v5:0, 1, v167:0, v5:0, 1 + v5:0, v5:0, 3 + v1:0, 3 + v3:0, 0, 3, 4) :|: v3:0 > 0 && v1:0 > 0 && v5:0 > -1 && v167:0 < 0 f_69 -> f_267(v1:0, v3:0, v5:0, 1 + v5:0, 1, v167:0, v5:0, 1 + v5:0, v5:0, 3 + v1:0, 3 + v3:0, 0, 3, 4) :|: v3:0 > 0 && v1:0 > 0 && v5:0 > -1 && v167:0 > 0 f_279(v442:0, v443:0, v444:0, 1 + v445:0, 1, v512:0, 0, v448:0, v449:0, v445:0, v451:0, v452:0, 3, 4) -> f_267(v442:0, v443:0, v444:0, 1 + v445:0, 1, v512:0, v445:0, 1 + v445:0, v445:0, v451:0, v452:0, 0, 3, 4) :|: v512:0 < 0 f_279(v442:0, v443:0, v444:0, 1 + v445:0, 1, v512:0, 0, v448:0, v449:0, v445:0, v451:0, v452:0, 3, 4) -> f_267(v442:0, v443:0, v444:0, 1 + v445:0, 1, v512:0, v445:0, 1 + v445:0, v445:0, v451:0, v452:0, 0, 3, 4) :|: v512:0 > 0 f_267(v404:0, v405:0, v406:0, 1 + v412:0, 1, v409:0, v410:0, v411:0, v412:0, v413:0, v414:0, 0, 3, 4) -> f_279(v404:0, v405:0, v406:0, 1 + v412:0, 1, v512:0, 0, 1 + v412:0, v412:0, v412:0, v413:0, v414:0, 3, 4) :|: v412:0 > -1 Filtered unneeded arguments: f_267(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14) -> f_267(x4, x9) f_279(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14) -> f_279(x4, x6, x10) Removed division, modulo operations, cleaned up constraints. Obtained 6 rules.P rules: f_267(v407:0, sum~cons_1~v549:0) -> f_267(1 + v549:0, v549:0) :|: v407:0 > 0 && v549:0 > -2 && sum~cons_1~v549:0 = 1 + v549:0 f_279(v450:0, cons_0, v445:0) -> f_279(1 + v450:0, v512:1, v450:0) :|: v450:0 > 0 && cons_0 = 0 f_69 -> f_267(1 + v5:0, v5:0) :|: v5:0 > -1 f_279(sum~cons_1~v445:0, v512:0, v445:0) -> f_267(1 + v445:0, v445:0) :|: v512:0 < 0 && sum~cons_1~v445:0 = 1 + v445:0 f_279(sum~cons_1~v445:0, v512:0, v445:0) -> f_267(1 + v445:0, v445:0) :|: v512:0 > 0 && sum~cons_1~v445:0 = 1 + v445:0 f_267(sum~cons_1~v412:0, v412:0) -> f_279(1 + v412:0, v512:0, v412:0) :|: v412:0 > -1 && sum~cons_1~v412:0 = 1 + v412:0 ---------------------------------------- (9) Obligation: Rules: f_267(v407:0, sum~cons_1~v549:0) -> f_267(1 + v549:0, v549:0) :|: v407:0 > 0 && v549:0 > -2 && sum~cons_1~v549:0 = 1 + v549:0 f_279(v450:0, cons_0, v445:0) -> f_279(1 + v450:0, v512:1, v450:0) :|: v450:0 > 0 && cons_0 = 0 f_69 -> f_267(1 + v5:0, v5:0) :|: v5:0 > -1 f_279(x, x1, x2) -> f_267(1 + x2, x2) :|: x1 < 0 && x = 1 + x2 f_279(x3, x4, x5) -> f_267(1 + x5, x5) :|: x4 > 0 && x3 = 1 + x5 f_267(sum~cons_1~v412:0, v412:0) -> f_279(1 + v412:0, v512:0, v412:0) :|: v412:0 > -1 && sum~cons_1~v412:0 = 1 + v412:0 Start term: f_69 ---------------------------------------- (10) IRS2T2 (EQUIVALENT) Transformed input IRS into an integer transition system.Used the following mapping from defined symbols to location IDs: (f_267_3,1) (f_279_3,2) (f_69_3,3) ---------------------------------------- (11) Obligation: START: 3; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := oldX1 - 1; oldX4 := nondet(); assume(oldX0 > 0 && oldX3 > -2 && oldX1 = 1 + oldX3); x0 := 1 + oldX3; x1 := oldX1 - 1; x2 := oldX4; TO: 1; FROM: 2; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := nondet(); assume(oldX0 > 0 && oldX1 = 0); x0 := 1 + oldX0; x1 := oldX3; x2 := oldX0; TO: 2; FROM: 3; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := nondet(); oldX4 := nondet(); assume(oldX3 > -1); x0 := 1 + oldX3; x1 := oldX3; x2 := oldX4; TO: 1; FROM: 2; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := nondet(); assume(oldX1 < 0 && oldX0 = 1 + oldX2); x0 := 1 + oldX2; x1 := oldX2; x2 := oldX3; TO: 1; FROM: 2; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := nondet(); assume(oldX1 > 0 && oldX0 = 1 + oldX2); x0 := 1 + oldX2; x1 := oldX2; x2 := oldX3; TO: 1; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := nondet(); assume(oldX1 > -1 && oldX0 = 1 + oldX1); x0 := 1 + oldX1; x1 := oldX3; x2 := oldX1; TO: 2; ---------------------------------------- (12) Obligation: Lasso ---------------------------------------- (13) Lasso2IRS (EQUIVALENT) Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: Generated rules. Obtained 77 rulesP rules: f_267(v404, v405, v406, v407, 1, v409, v410, v411, v412, v413, v414, 0, 3, 4) -> f_269(v404, v405, v406, v412, 1, v409, v410, v411, v407, v413, v414, 0, 3, 4) :|: 0 = 0 f_269(v404, v405, v406, v412, 1, v409, v410, v411, v407, v413, v414, 0, 3, 4) -> f_271(v404, v405, v406, v412, 1, v409, v410, v411, v407, v413, v414, 0, 3, 4) :|: 0 <= v412 && 1 <= v407 f_271(v404, v405, v406, v412, 1, v409, v410, v411, v407, v413, v414, 0, 3, 4) -> f_274(v404, v405, v406, v412, 1, v409, v410, v411, v407, v413, v414, 0, 3, 4) :|: 0 = 0 f_274(v404, v405, v406, v412, 1, v409, v410, v411, v407, v413, v414, 0, 3, 4) -> f_277(v404, v405, v406, v412, 1, v409, v410, v411, v407, v413, v414, 0, 3, 4) :|: TRUE f_277(v404, v405, v406, v412, 1, v409, v410, v411, v407, v413, v414, 0, 3, 4) -> f_280(v404, v405, v406, v412, 1, v513, v410, v411, v407, v413, v414, 0, 3, 4) :|: TRUE f_280(v404, v405, v406, v412, 1, v513, v410, v411, v407, v413, v414, 0, 3, 4) -> f_283(v404, v405, v406, v412, 1, v513, v410, v411, v407, v413, v414, 0, 3, 4) :|: v513 != 0 f_280(v404, v405, v406, v412, 1, v513, v410, v411, v407, v413, v414, 0, 3, 4) -> f_284(v404, v405, v406, v412, 1, 0, v410, v411, v407, v413, v414, 3, 4) :|: v513 = 0 f_283(v404, v405, v406, v412, 1, v513, v410, v411, v407, v413, v414, 0, 3, 4) -> f_287(v404, v405, v406, v412, 1, v513, v410, v411, v407, v413, v414, 0, 3, 4) :|: 0 = 0 f_287(v404, v405, v406, v412, 1, v513, v410, v411, v407, v413, v414, 0, 3, 4) -> f_291(v404, v405, v406, v412, 1, v513, v410, v411, v407, v413, v414, 0, 3, 4) :|: TRUE f_291(v404, v405, v406, v412, 1, v513, v410, v411, v407, v413, v414, 0, 3, 4) -> f_295(v404, v405, v406, v412, 1, v513, v410, v411, v413, v414, 0, 3, 4) :|: 0 = 0 f_295(v404, v405, v406, v412, 1, v513, v410, v411, v413, v414, 0, 3, 4) -> f_299(v404, v405, v406, v412, 1, v513, v410, v411, v549, v413, v414, 0, 3, 4) :|: 1 + v549 = v412 && 0 <= 1 + v549 f_299(v404, v405, v406, v412, 1, v513, v410, v411, v549, v413, v414, 0, 3, 4) -> f_303(v404, v405, v406, v412, 1, v513, v410, v411, v549, v413, v414, 0, 3, 4) :|: TRUE f_303(v404, v405, v406, v412, 1, v513, v410, v411, v549, v413, v414, 0, 3, 4) -> f_307(v404, v405, v406, v412, 1, v513, v410, v411, v549, v413, v414, 0, 3, 4) :|: TRUE f_307(v404, v405, v406, v412, 1, v513, v410, v411, v549, v413, v414, 0, 3, 4) -> f_264(v404, v405, v406, v412, 1, v513, v410, v411, v549, v413, v414, 0, 3, 4) :|: TRUE f_264(v404, v405, v406, v407, 1, v409, v410, v411, v412, v413, v414, 0, 3, 4) -> f_267(v404, v405, v406, v407, 1, v409, v410, v411, v412, v413, v414, 0, 3, 4) :|: TRUE f_284(v404, v405, v406, v412, 1, 0, v410, v411, v407, v413, v414, 3, 4) -> f_288(v404, v405, v406, v412, 1, 0, v410, v411, v407, v413, v414, 3, 4) :|: 0 = 0 f_288(v404, v405, v406, v412, 1, 0, v410, v411, v407, v413, v414, 3, 4) -> f_292(v404, v405, v406, v412, 1, 0, v410, v411, v407, v413, v414, 3, 4) :|: TRUE f_292(v404, v405, v406, v412, 1, 0, v410, v411, v407, v413, v414, 3, 4) -> f_296(v404, v405, v406, v412, 1, 0, v411, v407, v413, v414, 3, 4) :|: 0 = 0 f_296(v404, v405, v406, v412, 1, 0, v411, v407, v413, v414, 3, 4) -> f_300(v404, v405, v406, v412, 1, 0, v407, v413, v414, 3, 4) :|: v407 = 1 + v412 f_300(v404, v405, v406, v412, 1, 0, v407, v413, v414, 3, 4) -> f_304(v404, v405, v406, v412, 1, 0, v407, v413, v414, 3, 4) :|: TRUE f_304(v404, v405, v406, v412, 1, 0, v407, v413, v414, 3, 4) -> f_308(v404, v405, v406, v412, 1, 0, v407, v413, v414, 3, 4) :|: TRUE f_308(v404, v405, v406, v412, 1, 0, v407, v413, v414, 3, 4) -> f_266(v404, v405, v406, v412, 1, 0, v407, v412, v407, v413, v414, 3, 4) :|: TRUE f_266(v442, v443, v444, v445, 1, 0, v448, v449, v450, v451, v452, 3, 4) -> f_268(v442, v443, v444, v445, 1, 0, v448, v449, v450, v451, v452, 3, 4) :|: TRUE f_268(v442, v443, v444, v445, 1, 0, v448, v449, v450, v451, v452, 3, 4) -> f_270(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) :|: 0 = 0 f_270(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) -> f_273(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) :|: 0 = 0 f_273(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) -> f_276(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) :|: TRUE f_276(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) -> f_279(v442, v443, v444, v450, 1, v512, 0, v448, v449, v445, v451, v452, 3, 4) :|: TRUE f_279(v442, v443, v444, v450, 1, v512, 0, v448, v449, v445, v451, v452, 3, 4) -> f_281(v442, v443, v444, v450, 1, v512, 0, v448, v449, v445, v451, v452, 3, 4) :|: v512 != 0 f_279(v442, v443, v444, v450, 1, v512, 0, v448, v449, v445, v451, v452, 3, 4) -> f_282(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) :|: v512 = 0 f_281(v442, v443, v444, v450, 1, v512, 0, v448, v449, v445, v451, v452, 3, 4) -> f_285(v442, v443, v444, v450, 1, v512, v448, v449, v445, v451, v452, 0, 3, 4) :|: 0 = 0 f_285(v442, v443, v444, v450, 1, v512, v448, v449, v445, v451, v452, 0, 3, 4) -> f_289(v442, v443, v444, v450, 1, v512, v448, v449, v445, v451, v452, 0, 3, 4) :|: TRUE f_289(v442, v443, v444, v450, 1, v512, v448, v449, v445, v451, v452, 0, 3, 4) -> f_293(v442, v443, v444, v450, 1, v512, v449, v445, v451, v452, 0, 3, 4) :|: 0 = 0 f_293(v442, v443, v444, v450, 1, v512, v449, v445, v451, v452, 0, 3, 4) -> f_297(v442, v443, v444, v450, 1, v512, v445, v451, v452, 0, 3, 4) :|: 1 + v445 = v450 f_297(v442, v443, v444, v450, 1, v512, v445, v451, v452, 0, 3, 4) -> f_301(v442, v443, v444, v450, 1, v512, v445, v451, v452, 0, 3, 4) :|: TRUE f_301(v442, v443, v444, v450, 1, v512, v445, v451, v452, 0, 3, 4) -> f_305(v442, v443, v444, v450, 1, v512, v445, v451, v452, 0, 3, 4) :|: TRUE f_305(v442, v443, v444, v450, 1, v512, v445, v451, v452, 0, 3, 4) -> f_264(v442, v443, v444, v450, 1, v512, v445, v450, v445, v451, v452, 0, 3, 4) :|: TRUE f_282(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) -> f_286(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) :|: 0 = 0 f_286(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) -> f_290(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) :|: TRUE f_290(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) -> f_294(v442, v443, v444, v450, 1, 0, v448, v449, v451, v452, 3, 4) :|: 0 = 0 f_294(v442, v443, v444, v450, 1, 0, v448, v449, v451, v452, 3, 4) -> f_298(v442, v443, v444, v450, 1, 0, v448, v449, v548, v451, v452, 3, 4, 2) :|: v548 = 1 + v450 && 2 <= v548 f_298(v442, v443, v444, v450, 1, 0, v448, v449, v548, v451, v452, 3, 4, 2) -> f_302(v442, v443, v444, v450, 1, 0, v448, v449, v548, v451, v452, 3, 4, 2) :|: TRUE f_302(v442, v443, v444, v450, 1, 0, v448, v449, v548, v451, v452, 3, 4, 2) -> f_306(v442, v443, v444, v450, 1, 0, v448, v449, v548, v451, v452, 3, 4, 2) :|: TRUE f_306(v442, v443, v444, v450, 1, 0, v448, v449, v548, v451, v452, 3, 4, 2) -> f_266(v442, v443, v444, v450, 1, 0, v448, v449, v548, v451, v452, 3, 4) :|: TRUE f_69 -> f_70(v1, v2, 3, 1, 4) :|: 1 <= v1 && v2 = 3 + v1 && 4 <= v2 f_70(v1, v2, 3, 1, 4) -> f_71(v1, v3, v2, v4, 3, 1, 4) :|: 1 <= v3 && v4 = 3 + v3 && 4 <= v4 f_71(v1, v3, v2, v4, 3, 1, 4) -> f_72(v1, v3, v2, v4, 0, 3, 1, 4) :|: TRUE f_72(v1, v3, v2, v4, 0, 3, 1, 4) -> f_73(v1, v3, v5, v2, v4, 0, 3, 1, 4) :|: TRUE f_73(v1, v3, v5, v2, v4, 0, 3, 1, 4) -> f_74(v1, v3, v5, v2, v4, 0, 3, 1, 4) :|: TRUE f_74(v1, v3, v5, v2, v4, 0, 3, 1, 4) -> f_75(v1, v3, v5, v2, v4, 0, 3, 1, 4) :|: TRUE f_75(v1, v3, v5, v2, v4, 0, 3, 1, 4) -> f_76(v1, v3, v5, v2, v4, 0, 3, 1, 4) :|: 0 = 0 f_76(v1, v3, v5, v2, v4, 0, 3, 1, 4) -> f_77(v1, v3, v5, v2, v4, 0, 3, 1, 4) :|: 0 <= v5 f_77(v1, v3, v5, v2, v4, 0, 3, 1, 4) -> f_79(v1, v3, v5, 1, v2, v4, 0, 3, 4) :|: 0 = 0 f_79(v1, v3, v5, 1, v2, v4, 0, 3, 4) -> f_81(v1, v3, v5, 1, v2, v4, 0, 3, 4) :|: TRUE f_81(v1, v3, v5, 1, v2, v4, 0, 3, 4) -> f_83(v1, v3, v5, 1, v7, v2, v4, 0, 3, 4) :|: TRUE f_83(v1, v3, v5, 1, v7, v2, v4, 0, 3, 4) -> f_84(v1, v3, v5, 1, v7, v2, v4, 0, 3, 4) :|: v7 != 0 f_84(v1, v3, v5, 1, v7, v2, v4, 0, 3, 4) -> f_86(v1, v3, v5, 1, v7, v2, v4, 0, 3, 4) :|: 0 = 0 f_86(v1, v3, v5, 1, v7, v2, v4, 0, 3, 4) -> f_88(v1, v3, v5, 1, v7, v2, v4, 0, 3, 4) :|: TRUE f_88(v1, v3, v5, 1, v7, v2, v4, 0, 3, 4) -> f_90(v1, v3, v5, 1, v7, v2, v4, 0, 3, 4) :|: 0 = 0 f_90(v1, v3, v5, 1, v7, v2, v4, 0, 3, 4) -> f_92(v1, v3, v5, 1, v7, v8, v2, v4, 0, 3, 4) :|: 1 + v8 = v5 && 0 <= 1 + v8 f_92(v1, v3, v5, 1, v7, v8, v2, v4, 0, 3, 4) -> f_94(v1, v3, v5, 1, v7, v8, v2, v4, 0, 3, 4) :|: TRUE f_94(v1, v3, v5, 1, v7, v8, v2, v4, 0, 3, 4) -> f_96(v1, v3, v5, 1, v7, v8, v2, v4, 0, 3, 4) :|: TRUE f_96(v1, v3, v5, 1, v7, v8, v2, v4, 0, 3, 4) -> f_98(v1, v3, v5, 1, v7, v8, v2, v4, 0, 3, 4) :|: TRUE f_98(v1, v3, v5, 1, v7, v8, v2, v4, 0, 3, 4) -> f_143(v1, v3, v5, v5, 1, v7, v8, v2, v4, 0, 3, 4) :|: TRUE f_143(v75, v76, v77, v78, 1, v80, v81, v82, v83, 0, 3, 4) -> f_188(v75, v76, v77, v78, 1, v80, v81, v82, v83, 0, 3, 4) :|: TRUE f_188(v151, v152, v153, v154, 1, v156, v157, v158, v159, 0, 3, 4) -> f_190(v151, v152, v153, v157, 1, v156, v154, v158, v159, 0, 3, 4) :|: 0 = 0 f_190(v151, v152, v153, v157, 1, v156, v154, v158, v159, 0, 3, 4) -> f_192(v151, v152, v153, v157, 1, v156, v154, v158, v159, 0, 3, 4) :|: 0 <= v157 && 1 <= v154 && 1 <= v153 f_192(v151, v152, v153, v157, 1, v156, v154, v158, v159, 0, 3, 4) -> f_195(v151, v152, v153, v157, 1, v156, v154, v158, v159, 0, 3, 4) :|: 0 = 0 f_195(v151, v152, v153, v157, 1, v156, v154, v158, v159, 0, 3, 4) -> f_199(v151, v152, v153, v157, 1, v156, v154, v158, v159, 0, 3, 4) :|: TRUE f_199(v151, v152, v153, v157, 1, v156, v154, v158, v159, 0, 3, 4) -> f_203(v151, v152, v153, v157, 1, v171, v154, v158, v159, 0, 3, 4) :|: TRUE f_203(v151, v152, v153, v157, 1, v171, v154, v158, v159, 0, 3, 4) -> f_207(v151, v152, v153, v157, 1, 0, v154, v158, v159, 3, 4) :|: v171 = 0 f_207(v151, v152, v153, v157, 1, 0, v154, v158, v159, 3, 4) -> f_211(v151, v152, v153, v157, 1, 0, v154, v158, v159, 3, 4) :|: 0 = 0 f_211(v151, v152, v153, v157, 1, 0, v154, v158, v159, 3, 4) -> f_215(v151, v152, v153, v157, 1, 0, v154, v158, v159, 3, 4) :|: TRUE f_215(v151, v152, v153, v157, 1, 0, v154, v158, v159, 3, 4) -> f_219(v151, v152, v153, v157, 1, 0, v154, v158, v159, 3, 4) :|: 0 = 0 f_219(v151, v152, v153, v157, 1, 0, v154, v158, v159, 3, 4) -> f_223(v151, v152, v153, v157, 1, 0, v154, v158, v159, 3, 4) :|: v154 = 1 + v157 f_223(v151, v152, v153, v157, 1, 0, v154, v158, v159, 3, 4) -> f_226(v151, v152, v153, v157, 1, 0, v154, v158, v159, 3, 4) :|: TRUE f_226(v151, v152, v153, v157, 1, 0, v154, v158, v159, 3, 4) -> f_229(v151, v152, v153, v157, 1, 0, v154, v158, v159, 3, 4) :|: TRUE f_229(v151, v152, v153, v157, 1, 0, v154, v158, v159, 3, 4) -> f_266(v151, v152, v153, v157, 1, 0, v154, v157, v154, v158, v159, 3, 4) :|: TRUE Combined rules. Obtained 8 rulesP rules: f_267(v404:0, v405:0, v406:0, v407:0, 1, v409:0, v410:0, v411:0, 1 + v549:0, v413:0, v414:0, 0, 3, 4) -> f_267(v404:0, v405:0, v406:0, 1 + v549:0, 1, v513:0, v410:0, v411:0, v549:0, v413:0, v414:0, 0, 3, 4) :|: v407:0 > 0 && v549:0 > -2 && v513:0 < 0 f_267(v404:0, v405:0, v406:0, v407:0, 1, v409:0, v410:0, v411:0, 1 + v549:0, v413:0, v414:0, 0, 3, 4) -> f_267(v404:0, v405:0, v406:0, 1 + v549:0, 1, v513:0, v410:0, v411:0, v549:0, v413:0, v414:0, 0, 3, 4) :|: v407:0 > 0 && v549:0 > -2 && v513:0 > 0 f_279(v442:0, v443:0, v444:0, v450:0, 1, 0, 0, v448:0, v449:0, v445:0, v451:0, v452:0, 3, 4) -> f_279(v442:0, v443:0, v444:0, 1 + v450:0, 1, v512:1, 0, v448:0, v449:0, v450:0, v451:0, v452:0, 3, 4) :|: v450:0 > 0 f_279(v442:0, v443:0, v444:0, 1 + v445:0, 1, v512:0, 0, v448:0, v449:0, v445:0, v451:0, v452:0, 3, 4) -> f_267(v442:0, v443:0, v444:0, 1 + v445:0, 1, v512:0, v445:0, 1 + v445:0, v445:0, v451:0, v452:0, 0, 3, 4) :|: v512:0 < 0 f_279(v442:0, v443:0, v444:0, 1 + v445:0, 1, v512:0, 0, v448:0, v449:0, v445:0, v451:0, v452:0, 3, 4) -> f_267(v442:0, v443:0, v444:0, 1 + v445:0, 1, v512:0, v445:0, 1 + v445:0, v445:0, v451:0, v452:0, 0, 3, 4) :|: v512:0 > 0 f_267(v404:0, v405:0, v406:0, 1 + v412:0, 1, v409:0, v410:0, v411:0, v412:0, v413:0, v414:0, 0, 3, 4) -> f_279(v404:0, v405:0, v406:0, 1 + v412:0, 1, v512:0, 0, 1 + v412:0, v412:0, v412:0, v413:0, v414:0, 3, 4) :|: v412:0 > -1 f_69 -> f_279(v1:0, v3:0, 1 + v8:0, 1 + v8:0, 1, v512:0, 0, 1 + v8:0, v8:0, v8:0, 3 + v1:0, 3 + v3:0, 3, 4) :|: v8:0 > -1 && v3:0 > 0 && v1:0 > 0 && v7:0 < 0 f_69 -> f_279(v1:0, v3:0, 1 + v8:0, 1 + v8:0, 1, v512:0, 0, 1 + v8:0, v8:0, v8:0, 3 + v1:0, 3 + v3:0, 3, 4) :|: v8:0 > -1 && v3:0 > 0 && v1:0 > 0 && v7:0 > 0 Filtered unneeded arguments: f_267(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14) -> f_267(x4, x9) f_279(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14) -> f_279(x4, x6, x10) Removed division, modulo operations, cleaned up constraints. Obtained 6 rules.P rules: f_267(v407:0, sum~cons_1~v549:0) -> f_267(1 + v549:0, v549:0) :|: v407:0 > 0 && v549:0 > -2 && sum~cons_1~v549:0 = 1 + v549:0 f_279(v450:0, cons_0, v445:0) -> f_279(1 + v450:0, v512:1, v450:0) :|: v450:0 > 0 && cons_0 = 0 f_279(sum~cons_1~v445:0, v512:0, v445:0) -> f_267(1 + v445:0, v445:0) :|: v512:0 < 0 && sum~cons_1~v445:0 = 1 + v445:0 f_279(sum~cons_1~v445:0, v512:0, v445:0) -> f_267(1 + v445:0, v445:0) :|: v512:0 > 0 && sum~cons_1~v445:0 = 1 + v445:0 f_267(sum~cons_1~v412:0, v412:0) -> f_279(1 + v412:0, v512:0, v412:0) :|: v412:0 > -1 && sum~cons_1~v412:0 = 1 + v412:0 f_69 -> f_279(1 + v8:0, v512:0, v8:0) :|: v8:0 > -1 ---------------------------------------- (14) Obligation: Rules: f_267(v407:0, sum~cons_1~v549:0) -> f_267(1 + v549:0, v549:0) :|: v407:0 > 0 && v549:0 > -2 && sum~cons_1~v549:0 = 1 + v549:0 f_279(v450:0, cons_0, v445:0) -> f_279(1 + v450:0, v512:1, v450:0) :|: v450:0 > 0 && cons_0 = 0 f_279(x, x1, x2) -> f_267(1 + x2, x2) :|: x1 < 0 && x = 1 + x2 f_279(x3, x4, x5) -> f_267(1 + x5, x5) :|: x4 > 0 && x3 = 1 + x5 f_267(sum~cons_1~v412:0, v412:0) -> f_279(1 + v412:0, v512:0, v412:0) :|: v412:0 > -1 && sum~cons_1~v412:0 = 1 + v412:0 f_69 -> f_279(1 + x6, x7, x6) :|: x6 > -1 Start term: f_69 ---------------------------------------- (15) IRS2T2 (EQUIVALENT) Transformed input IRS into an integer transition system.Used the following mapping from defined symbols to location IDs: (f_267_3,1) (f_279_3,2) (f_69_3,3) ---------------------------------------- (16) Obligation: START: 3; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := oldX1 - 1; oldX4 := nondet(); assume(oldX0 > 0 && oldX3 > -2 && oldX1 = 1 + oldX3); x0 := 1 + oldX3; x1 := oldX1 - 1; x2 := oldX4; TO: 1; FROM: 2; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := nondet(); assume(oldX0 > 0 && oldX1 = 0); x0 := 1 + oldX0; x1 := oldX3; x2 := oldX0; TO: 2; FROM: 2; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := nondet(); assume(oldX1 < 0 && oldX0 = 1 + oldX2); x0 := 1 + oldX2; x1 := oldX2; x2 := oldX3; TO: 1; FROM: 2; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := nondet(); assume(oldX1 > 0 && oldX0 = 1 + oldX2); x0 := 1 + oldX2; x1 := oldX2; x2 := oldX3; TO: 1; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := nondet(); assume(oldX1 > -1 && oldX0 = 1 + oldX1); x0 := 1 + oldX1; x1 := oldX3; x2 := oldX1; TO: 2; FROM: 3; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := nondet(); oldX4 := nondet(); assume(oldX3 > -1); x0 := 1 + oldX3; x1 := oldX4; x2 := oldX3; TO: 2; ---------------------------------------- (17) Obligation: Lasso ---------------------------------------- (18) Lasso2IRS (EQUIVALENT) Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: Generated rules. Obtained 76 rulesP rules: f_267(v404, v405, v406, v407, 1, v409, v410, v411, v412, v413, v414, 0, 3, 4) -> f_269(v404, v405, v406, v412, 1, v409, v410, v411, v407, v413, v414, 0, 3, 4) :|: 0 = 0 f_269(v404, v405, v406, v412, 1, v409, v410, v411, v407, v413, v414, 0, 3, 4) -> f_271(v404, v405, v406, v412, 1, v409, v410, v411, v407, v413, v414, 0, 3, 4) :|: 0 <= v412 && 1 <= v407 f_271(v404, v405, v406, v412, 1, v409, v410, v411, v407, v413, v414, 0, 3, 4) -> f_274(v404, v405, v406, v412, 1, v409, v410, v411, v407, v413, v414, 0, 3, 4) :|: 0 = 0 f_274(v404, v405, v406, v412, 1, v409, v410, v411, v407, v413, v414, 0, 3, 4) -> f_277(v404, v405, v406, v412, 1, v409, v410, v411, v407, v413, v414, 0, 3, 4) :|: TRUE f_277(v404, v405, v406, v412, 1, v409, v410, v411, v407, v413, v414, 0, 3, 4) -> f_280(v404, v405, v406, v412, 1, v513, v410, v411, v407, v413, v414, 0, 3, 4) :|: TRUE f_280(v404, v405, v406, v412, 1, v513, v410, v411, v407, v413, v414, 0, 3, 4) -> f_283(v404, v405, v406, v412, 1, v513, v410, v411, v407, v413, v414, 0, 3, 4) :|: v513 != 0 f_280(v404, v405, v406, v412, 1, v513, v410, v411, v407, v413, v414, 0, 3, 4) -> f_284(v404, v405, v406, v412, 1, 0, v410, v411, v407, v413, v414, 3, 4) :|: v513 = 0 f_283(v404, v405, v406, v412, 1, v513, v410, v411, v407, v413, v414, 0, 3, 4) -> f_287(v404, v405, v406, v412, 1, v513, v410, v411, v407, v413, v414, 0, 3, 4) :|: 0 = 0 f_287(v404, v405, v406, v412, 1, v513, v410, v411, v407, v413, v414, 0, 3, 4) -> f_291(v404, v405, v406, v412, 1, v513, v410, v411, v407, v413, v414, 0, 3, 4) :|: TRUE f_291(v404, v405, v406, v412, 1, v513, v410, v411, v407, v413, v414, 0, 3, 4) -> f_295(v404, v405, v406, v412, 1, v513, v410, v411, v413, v414, 0, 3, 4) :|: 0 = 0 f_295(v404, v405, v406, v412, 1, v513, v410, v411, v413, v414, 0, 3, 4) -> f_299(v404, v405, v406, v412, 1, v513, v410, v411, v549, v413, v414, 0, 3, 4) :|: 1 + v549 = v412 && 0 <= 1 + v549 f_299(v404, v405, v406, v412, 1, v513, v410, v411, v549, v413, v414, 0, 3, 4) -> f_303(v404, v405, v406, v412, 1, v513, v410, v411, v549, v413, v414, 0, 3, 4) :|: TRUE f_303(v404, v405, v406, v412, 1, v513, v410, v411, v549, v413, v414, 0, 3, 4) -> f_307(v404, v405, v406, v412, 1, v513, v410, v411, v549, v413, v414, 0, 3, 4) :|: TRUE f_307(v404, v405, v406, v412, 1, v513, v410, v411, v549, v413, v414, 0, 3, 4) -> f_264(v404, v405, v406, v412, 1, v513, v410, v411, v549, v413, v414, 0, 3, 4) :|: TRUE f_264(v404, v405, v406, v407, 1, v409, v410, v411, v412, v413, v414, 0, 3, 4) -> f_267(v404, v405, v406, v407, 1, v409, v410, v411, v412, v413, v414, 0, 3, 4) :|: TRUE f_284(v404, v405, v406, v412, 1, 0, v410, v411, v407, v413, v414, 3, 4) -> f_288(v404, v405, v406, v412, 1, 0, v410, v411, v407, v413, v414, 3, 4) :|: 0 = 0 f_288(v404, v405, v406, v412, 1, 0, v410, v411, v407, v413, v414, 3, 4) -> f_292(v404, v405, v406, v412, 1, 0, v410, v411, v407, v413, v414, 3, 4) :|: TRUE f_292(v404, v405, v406, v412, 1, 0, v410, v411, v407, v413, v414, 3, 4) -> f_296(v404, v405, v406, v412, 1, 0, v411, v407, v413, v414, 3, 4) :|: 0 = 0 f_296(v404, v405, v406, v412, 1, 0, v411, v407, v413, v414, 3, 4) -> f_300(v404, v405, v406, v412, 1, 0, v407, v413, v414, 3, 4) :|: v407 = 1 + v412 f_300(v404, v405, v406, v412, 1, 0, v407, v413, v414, 3, 4) -> f_304(v404, v405, v406, v412, 1, 0, v407, v413, v414, 3, 4) :|: TRUE f_304(v404, v405, v406, v412, 1, 0, v407, v413, v414, 3, 4) -> f_308(v404, v405, v406, v412, 1, 0, v407, v413, v414, 3, 4) :|: TRUE f_308(v404, v405, v406, v412, 1, 0, v407, v413, v414, 3, 4) -> f_266(v404, v405, v406, v412, 1, 0, v407, v412, v407, v413, v414, 3, 4) :|: TRUE f_266(v442, v443, v444, v445, 1, 0, v448, v449, v450, v451, v452, 3, 4) -> f_268(v442, v443, v444, v445, 1, 0, v448, v449, v450, v451, v452, 3, 4) :|: TRUE f_268(v442, v443, v444, v445, 1, 0, v448, v449, v450, v451, v452, 3, 4) -> f_270(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) :|: 0 = 0 f_270(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) -> f_273(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) :|: 0 = 0 f_273(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) -> f_276(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) :|: TRUE f_276(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) -> f_279(v442, v443, v444, v450, 1, v512, 0, v448, v449, v445, v451, v452, 3, 4) :|: TRUE f_279(v442, v443, v444, v450, 1, v512, 0, v448, v449, v445, v451, v452, 3, 4) -> f_281(v442, v443, v444, v450, 1, v512, 0, v448, v449, v445, v451, v452, 3, 4) :|: v512 != 0 f_279(v442, v443, v444, v450, 1, v512, 0, v448, v449, v445, v451, v452, 3, 4) -> f_282(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) :|: v512 = 0 f_281(v442, v443, v444, v450, 1, v512, 0, v448, v449, v445, v451, v452, 3, 4) -> f_285(v442, v443, v444, v450, 1, v512, v448, v449, v445, v451, v452, 0, 3, 4) :|: 0 = 0 f_285(v442, v443, v444, v450, 1, v512, v448, v449, v445, v451, v452, 0, 3, 4) -> f_289(v442, v443, v444, v450, 1, v512, v448, v449, v445, v451, v452, 0, 3, 4) :|: TRUE f_289(v442, v443, v444, v450, 1, v512, v448, v449, v445, v451, v452, 0, 3, 4) -> f_293(v442, v443, v444, v450, 1, v512, v449, v445, v451, v452, 0, 3, 4) :|: 0 = 0 f_293(v442, v443, v444, v450, 1, v512, v449, v445, v451, v452, 0, 3, 4) -> f_297(v442, v443, v444, v450, 1, v512, v445, v451, v452, 0, 3, 4) :|: 1 + v445 = v450 f_297(v442, v443, v444, v450, 1, v512, v445, v451, v452, 0, 3, 4) -> f_301(v442, v443, v444, v450, 1, v512, v445, v451, v452, 0, 3, 4) :|: TRUE f_301(v442, v443, v444, v450, 1, v512, v445, v451, v452, 0, 3, 4) -> f_305(v442, v443, v444, v450, 1, v512, v445, v451, v452, 0, 3, 4) :|: TRUE f_305(v442, v443, v444, v450, 1, v512, v445, v451, v452, 0, 3, 4) -> f_264(v442, v443, v444, v450, 1, v512, v445, v450, v445, v451, v452, 0, 3, 4) :|: TRUE f_282(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) -> f_286(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) :|: 0 = 0 f_286(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) -> f_290(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) :|: TRUE f_290(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) -> f_294(v442, v443, v444, v450, 1, 0, v448, v449, v451, v452, 3, 4) :|: 0 = 0 f_294(v442, v443, v444, v450, 1, 0, v448, v449, v451, v452, 3, 4) -> f_298(v442, v443, v444, v450, 1, 0, v448, v449, v548, v451, v452, 3, 4, 2) :|: v548 = 1 + v450 && 2 <= v548 f_298(v442, v443, v444, v450, 1, 0, v448, v449, v548, v451, v452, 3, 4, 2) -> f_302(v442, v443, v444, v450, 1, 0, v448, v449, v548, v451, v452, 3, 4, 2) :|: TRUE f_302(v442, v443, v444, v450, 1, 0, v448, v449, v548, v451, v452, 3, 4, 2) -> f_306(v442, v443, v444, v450, 1, 0, v448, v449, v548, v451, v452, 3, 4, 2) :|: TRUE f_306(v442, v443, v444, v450, 1, 0, v448, v449, v548, v451, v452, 3, 4, 2) -> f_266(v442, v443, v444, v450, 1, 0, v448, v449, v548, v451, v452, 3, 4) :|: TRUE f_69 -> f_70(v1, v2, 3, 1, 4) :|: 1 <= v1 && v2 = 3 + v1 && 4 <= v2 f_70(v1, v2, 3, 1, 4) -> f_71(v1, v3, v2, v4, 3, 1, 4) :|: 1 <= v3 && v4 = 3 + v3 && 4 <= v4 f_71(v1, v3, v2, v4, 3, 1, 4) -> f_72(v1, v3, v2, v4, 0, 3, 1, 4) :|: TRUE f_72(v1, v3, v2, v4, 0, 3, 1, 4) -> f_73(v1, v3, v5, v2, v4, 0, 3, 1, 4) :|: TRUE f_73(v1, v3, v5, v2, v4, 0, 3, 1, 4) -> f_74(v1, v3, v5, v2, v4, 0, 3, 1, 4) :|: TRUE f_74(v1, v3, v5, v2, v4, 0, 3, 1, 4) -> f_75(v1, v3, v5, v2, v4, 0, 3, 1, 4) :|: TRUE f_75(v1, v3, v5, v2, v4, 0, 3, 1, 4) -> f_76(v1, v3, v5, v2, v4, 0, 3, 1, 4) :|: 0 = 0 f_76(v1, v3, v5, v2, v4, 0, 3, 1, 4) -> f_77(v1, v3, v5, v2, v4, 0, 3, 1, 4) :|: 0 <= v5 f_77(v1, v3, v5, v2, v4, 0, 3, 1, 4) -> f_79(v1, v3, v5, 1, v2, v4, 0, 3, 4) :|: 0 = 0 f_79(v1, v3, v5, 1, v2, v4, 0, 3, 4) -> f_81(v1, v3, v5, 1, v2, v4, 0, 3, 4) :|: TRUE f_81(v1, v3, v5, 1, v2, v4, 0, 3, 4) -> f_83(v1, v3, v5, 1, v7, v2, v4, 0, 3, 4) :|: TRUE f_83(v1, v3, v5, 1, v7, v2, v4, 0, 3, 4) -> f_85(v1, v3, v5, 1, 0, v2, v4, 3, 4) :|: v7 = 0 f_85(v1, v3, v5, 1, 0, v2, v4, 3, 4) -> f_87(v1, v3, v5, 1, 0, v2, v4, 3, 4) :|: 0 = 0 f_87(v1, v3, v5, 1, 0, v2, v4, 3, 4) -> f_89(v1, v3, v5, 1, 0, v2, v4, 3, 4) :|: TRUE f_89(v1, v3, v5, 1, 0, v2, v4, 3, 4) -> f_91(v1, v3, v5, 1, 0, v2, v4, 3, 4) :|: 0 = 0 f_91(v1, v3, v5, 1, 0, v2, v4, 3, 4) -> f_93(v1, v3, v5, 1, 0, v9, v2, v4, 3, 4) :|: v9 = 1 + v5 && 1 <= v9 f_93(v1, v3, v5, 1, 0, v9, v2, v4, 3, 4) -> f_95(v1, v3, v5, 1, 0, v9, v2, v4, 3, 4) :|: TRUE f_95(v1, v3, v5, 1, 0, v9, v2, v4, 3, 4) -> f_97(v1, v3, v5, 1, 0, v9, v2, v4, 3, 4) :|: TRUE f_97(v1, v3, v5, 1, 0, v9, v2, v4, 3, 4) -> f_138(v1, v3, v5, v5, 1, 0, v9, v2, v4, 3, 4) :|: TRUE f_138(v39, v40, v41, v42, 1, 0, v45, v46, v47, 3, 4) -> f_180(v39, v40, v41, v42, 1, 0, v45, v46, v47, 3, 4) :|: TRUE f_180(v112, v113, v114, v115, 1, 0, v118, v119, v120, 3, 4) -> f_183(v112, v113, v114, v115, 1, 0, v118, v119, v120, 3, 4) :|: TRUE f_183(v112, v113, v114, v115, 1, 0, v118, v119, v120, 3, 4) -> f_186(v112, v113, v114, v118, 1, 0, v115, v119, v120, 3, 4) :|: 0 = 0 f_186(v112, v113, v114, v118, 1, 0, v115, v119, v120, 3, 4) -> f_189(v112, v113, v114, v118, 1, 0, v115, v119, v120, 3, 4) :|: 0 = 0 f_189(v112, v113, v114, v118, 1, 0, v115, v119, v120, 3, 4) -> f_191(v112, v113, v114, v118, 1, 0, v115, v119, v120, 3, 4) :|: TRUE f_191(v112, v113, v114, v118, 1, 0, v115, v119, v120, 3, 4) -> f_194(v112, v113, v114, v118, 1, v167, 0, v115, v119, v120, 3, 4) :|: TRUE f_194(v112, v113, v114, v118, 1, v167, 0, v115, v119, v120, 3, 4) -> f_197(v112, v113, v114, v118, 1, v167, 0, v115, v119, v120, 3, 4) :|: v167 != 0 f_197(v112, v113, v114, v118, 1, v167, 0, v115, v119, v120, 3, 4) -> f_201(v112, v113, v114, v118, 1, v167, v115, v119, v120, 0, 3, 4) :|: 0 = 0 f_201(v112, v113, v114, v118, 1, v167, v115, v119, v120, 0, 3, 4) -> f_204(v112, v113, v114, v118, 1, v167, v115, v119, v120, 0, 3, 4) :|: TRUE f_204(v112, v113, v114, v118, 1, v167, v115, v119, v120, 0, 3, 4) -> f_208(v112, v113, v114, v118, 1, v167, v115, v119, v120, 0, 3, 4) :|: 0 = 0 f_208(v112, v113, v114, v118, 1, v167, v115, v119, v120, 0, 3, 4) -> f_212(v112, v113, v114, v118, 1, v167, v115, v119, v120, 0, 3, 4) :|: 1 + v115 = v118 f_212(v112, v113, v114, v118, 1, v167, v115, v119, v120, 0, 3, 4) -> f_216(v112, v113, v114, v118, 1, v167, v115, v119, v120, 0, 3, 4) :|: TRUE f_216(v112, v113, v114, v118, 1, v167, v115, v119, v120, 0, 3, 4) -> f_220(v112, v113, v114, v118, 1, v167, v115, v119, v120, 0, 3, 4) :|: TRUE f_220(v112, v113, v114, v118, 1, v167, v115, v119, v120, 0, 3, 4) -> f_264(v112, v113, v114, v118, 1, v167, v115, v118, v115, v119, v120, 0, 3, 4) :|: TRUE Combined rules. Obtained 8 rulesP rules: f_267(v404:0, v405:0, v406:0, v407:0, 1, v409:0, v410:0, v411:0, 1 + v549:0, v413:0, v414:0, 0, 3, 4) -> f_267(v404:0, v405:0, v406:0, 1 + v549:0, 1, v513:0, v410:0, v411:0, v549:0, v413:0, v414:0, 0, 3, 4) :|: v407:0 > 0 && v549:0 > -2 && v513:0 < 0 f_267(v404:0, v405:0, v406:0, v407:0, 1, v409:0, v410:0, v411:0, 1 + v549:0, v413:0, v414:0, 0, 3, 4) -> f_267(v404:0, v405:0, v406:0, 1 + v549:0, 1, v513:0, v410:0, v411:0, v549:0, v413:0, v414:0, 0, 3, 4) :|: v407:0 > 0 && v549:0 > -2 && v513:0 > 0 f_279(v442:0, v443:0, v444:0, v450:0, 1, 0, 0, v448:0, v449:0, v445:0, v451:0, v452:0, 3, 4) -> f_279(v442:0, v443:0, v444:0, 1 + v450:0, 1, v512:1, 0, v448:0, v449:0, v450:0, v451:0, v452:0, 3, 4) :|: v450:0 > 0 f_69 -> f_267(v1:0, v3:0, v5:0, 1 + v5:0, 1, v167:0, v5:0, 1 + v5:0, v5:0, 3 + v1:0, 3 + v3:0, 0, 3, 4) :|: v3:0 > 0 && v1:0 > 0 && v5:0 > -1 && v167:0 < 0 f_69 -> f_267(v1:0, v3:0, v5:0, 1 + v5:0, 1, v167:0, v5:0, 1 + v5:0, v5:0, 3 + v1:0, 3 + v3:0, 0, 3, 4) :|: v3:0 > 0 && v1:0 > 0 && v5:0 > -1 && v167:0 > 0 f_279(v442:0, v443:0, v444:0, 1 + v445:0, 1, v512:0, 0, v448:0, v449:0, v445:0, v451:0, v452:0, 3, 4) -> f_267(v442:0, v443:0, v444:0, 1 + v445:0, 1, v512:0, v445:0, 1 + v445:0, v445:0, v451:0, v452:0, 0, 3, 4) :|: v512:0 < 0 f_279(v442:0, v443:0, v444:0, 1 + v445:0, 1, v512:0, 0, v448:0, v449:0, v445:0, v451:0, v452:0, 3, 4) -> f_267(v442:0, v443:0, v444:0, 1 + v445:0, 1, v512:0, v445:0, 1 + v445:0, v445:0, v451:0, v452:0, 0, 3, 4) :|: v512:0 > 0 f_267(v404:0, v405:0, v406:0, 1 + v412:0, 1, v409:0, v410:0, v411:0, v412:0, v413:0, v414:0, 0, 3, 4) -> f_279(v404:0, v405:0, v406:0, 1 + v412:0, 1, v512:0, 0, 1 + v412:0, v412:0, v412:0, v413:0, v414:0, 3, 4) :|: v412:0 > -1 Filtered unneeded arguments: f_267(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14) -> f_267(x4, x9) f_279(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14) -> f_279(x4, x6, x10) Removed division, modulo operations, cleaned up constraints. Obtained 6 rules.P rules: f_267(v407:0, sum~cons_1~v549:0) -> f_267(1 + v549:0, v549:0) :|: v407:0 > 0 && v549:0 > -2 && sum~cons_1~v549:0 = 1 + v549:0 f_279(v450:0, cons_0, v445:0) -> f_279(1 + v450:0, v512:1, v450:0) :|: v450:0 > 0 && cons_0 = 0 f_69 -> f_267(1 + v5:0, v5:0) :|: v5:0 > -1 f_279(sum~cons_1~v445:0, v512:0, v445:0) -> f_267(1 + v445:0, v445:0) :|: v512:0 < 0 && sum~cons_1~v445:0 = 1 + v445:0 f_279(sum~cons_1~v445:0, v512:0, v445:0) -> f_267(1 + v445:0, v445:0) :|: v512:0 > 0 && sum~cons_1~v445:0 = 1 + v445:0 f_267(sum~cons_1~v412:0, v412:0) -> f_279(1 + v412:0, v512:0, v412:0) :|: v412:0 > -1 && sum~cons_1~v412:0 = 1 + v412:0 ---------------------------------------- (19) Obligation: Rules: f_267(v407:0, sum~cons_1~v549:0) -> f_267(1 + v549:0, v549:0) :|: v407:0 > 0 && v549:0 > -2 && sum~cons_1~v549:0 = 1 + v549:0 f_279(v450:0, cons_0, v445:0) -> f_279(1 + v450:0, v512:1, v450:0) :|: v450:0 > 0 && cons_0 = 0 f_69 -> f_267(1 + v5:0, v5:0) :|: v5:0 > -1 f_279(x, x1, x2) -> f_267(1 + x2, x2) :|: x1 < 0 && x = 1 + x2 f_279(x3, x4, x5) -> f_267(1 + x5, x5) :|: x4 > 0 && x3 = 1 + x5 f_267(sum~cons_1~v412:0, v412:0) -> f_279(1 + v412:0, v512:0, v412:0) :|: v412:0 > -1 && sum~cons_1~v412:0 = 1 + v412:0 Start term: f_69 ---------------------------------------- (20) IRS2T2 (EQUIVALENT) Transformed input IRS into an integer transition system.Used the following mapping from defined symbols to location IDs: (f_267_3,1) (f_279_3,2) (f_69_3,3) ---------------------------------------- (21) Obligation: START: 3; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := oldX1 - 1; oldX4 := nondet(); assume(oldX0 > 0 && oldX3 > -2 && oldX1 = 1 + oldX3); x0 := 1 + oldX3; x1 := oldX1 - 1; x2 := oldX4; TO: 1; FROM: 2; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := nondet(); assume(oldX0 > 0 && oldX1 = 0); x0 := 1 + oldX0; x1 := oldX3; x2 := oldX0; TO: 2; FROM: 3; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := nondet(); oldX4 := nondet(); assume(oldX3 > -1); x0 := 1 + oldX3; x1 := oldX3; x2 := oldX4; TO: 1; FROM: 2; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := nondet(); assume(oldX1 < 0 && oldX0 = 1 + oldX2); x0 := 1 + oldX2; x1 := oldX2; x2 := oldX3; TO: 1; FROM: 2; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := nondet(); assume(oldX1 > 0 && oldX0 = 1 + oldX2); x0 := 1 + oldX2; x1 := oldX2; x2 := oldX3; TO: 1; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := nondet(); assume(oldX1 > -1 && oldX0 = 1 + oldX1); x0 := 1 + oldX1; x1 := oldX3; x2 := oldX1; TO: 2; ---------------------------------------- (22) Obligation: Lasso ---------------------------------------- (23) Lasso2IRS (EQUIVALENT) Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: Generated rules. Obtained 77 rulesP rules: f_267(v404, v405, v406, v407, 1, v409, v410, v411, v412, v413, v414, 0, 3, 4) -> f_269(v404, v405, v406, v412, 1, v409, v410, v411, v407, v413, v414, 0, 3, 4) :|: 0 = 0 f_269(v404, v405, v406, v412, 1, v409, v410, v411, v407, v413, v414, 0, 3, 4) -> f_271(v404, v405, v406, v412, 1, v409, v410, v411, v407, v413, v414, 0, 3, 4) :|: 0 <= v412 && 1 <= v407 f_271(v404, v405, v406, v412, 1, v409, v410, v411, v407, v413, v414, 0, 3, 4) -> f_274(v404, v405, v406, v412, 1, v409, v410, v411, v407, v413, v414, 0, 3, 4) :|: 0 = 0 f_274(v404, v405, v406, v412, 1, v409, v410, v411, v407, v413, v414, 0, 3, 4) -> f_277(v404, v405, v406, v412, 1, v409, v410, v411, v407, v413, v414, 0, 3, 4) :|: TRUE f_277(v404, v405, v406, v412, 1, v409, v410, v411, v407, v413, v414, 0, 3, 4) -> f_280(v404, v405, v406, v412, 1, v513, v410, v411, v407, v413, v414, 0, 3, 4) :|: TRUE f_280(v404, v405, v406, v412, 1, v513, v410, v411, v407, v413, v414, 0, 3, 4) -> f_283(v404, v405, v406, v412, 1, v513, v410, v411, v407, v413, v414, 0, 3, 4) :|: v513 != 0 f_280(v404, v405, v406, v412, 1, v513, v410, v411, v407, v413, v414, 0, 3, 4) -> f_284(v404, v405, v406, v412, 1, 0, v410, v411, v407, v413, v414, 3, 4) :|: v513 = 0 f_283(v404, v405, v406, v412, 1, v513, v410, v411, v407, v413, v414, 0, 3, 4) -> f_287(v404, v405, v406, v412, 1, v513, v410, v411, v407, v413, v414, 0, 3, 4) :|: 0 = 0 f_287(v404, v405, v406, v412, 1, v513, v410, v411, v407, v413, v414, 0, 3, 4) -> f_291(v404, v405, v406, v412, 1, v513, v410, v411, v407, v413, v414, 0, 3, 4) :|: TRUE f_291(v404, v405, v406, v412, 1, v513, v410, v411, v407, v413, v414, 0, 3, 4) -> f_295(v404, v405, v406, v412, 1, v513, v410, v411, v413, v414, 0, 3, 4) :|: 0 = 0 f_295(v404, v405, v406, v412, 1, v513, v410, v411, v413, v414, 0, 3, 4) -> f_299(v404, v405, v406, v412, 1, v513, v410, v411, v549, v413, v414, 0, 3, 4) :|: 1 + v549 = v412 && 0 <= 1 + v549 f_299(v404, v405, v406, v412, 1, v513, v410, v411, v549, v413, v414, 0, 3, 4) -> f_303(v404, v405, v406, v412, 1, v513, v410, v411, v549, v413, v414, 0, 3, 4) :|: TRUE f_303(v404, v405, v406, v412, 1, v513, v410, v411, v549, v413, v414, 0, 3, 4) -> f_307(v404, v405, v406, v412, 1, v513, v410, v411, v549, v413, v414, 0, 3, 4) :|: TRUE f_307(v404, v405, v406, v412, 1, v513, v410, v411, v549, v413, v414, 0, 3, 4) -> f_264(v404, v405, v406, v412, 1, v513, v410, v411, v549, v413, v414, 0, 3, 4) :|: TRUE f_264(v404, v405, v406, v407, 1, v409, v410, v411, v412, v413, v414, 0, 3, 4) -> f_267(v404, v405, v406, v407, 1, v409, v410, v411, v412, v413, v414, 0, 3, 4) :|: TRUE f_284(v404, v405, v406, v412, 1, 0, v410, v411, v407, v413, v414, 3, 4) -> f_288(v404, v405, v406, v412, 1, 0, v410, v411, v407, v413, v414, 3, 4) :|: 0 = 0 f_288(v404, v405, v406, v412, 1, 0, v410, v411, v407, v413, v414, 3, 4) -> f_292(v404, v405, v406, v412, 1, 0, v410, v411, v407, v413, v414, 3, 4) :|: TRUE f_292(v404, v405, v406, v412, 1, 0, v410, v411, v407, v413, v414, 3, 4) -> f_296(v404, v405, v406, v412, 1, 0, v411, v407, v413, v414, 3, 4) :|: 0 = 0 f_296(v404, v405, v406, v412, 1, 0, v411, v407, v413, v414, 3, 4) -> f_300(v404, v405, v406, v412, 1, 0, v407, v413, v414, 3, 4) :|: v407 = 1 + v412 f_300(v404, v405, v406, v412, 1, 0, v407, v413, v414, 3, 4) -> f_304(v404, v405, v406, v412, 1, 0, v407, v413, v414, 3, 4) :|: TRUE f_304(v404, v405, v406, v412, 1, 0, v407, v413, v414, 3, 4) -> f_308(v404, v405, v406, v412, 1, 0, v407, v413, v414, 3, 4) :|: TRUE f_308(v404, v405, v406, v412, 1, 0, v407, v413, v414, 3, 4) -> f_266(v404, v405, v406, v412, 1, 0, v407, v412, v407, v413, v414, 3, 4) :|: TRUE f_266(v442, v443, v444, v445, 1, 0, v448, v449, v450, v451, v452, 3, 4) -> f_268(v442, v443, v444, v445, 1, 0, v448, v449, v450, v451, v452, 3, 4) :|: TRUE f_268(v442, v443, v444, v445, 1, 0, v448, v449, v450, v451, v452, 3, 4) -> f_270(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) :|: 0 = 0 f_270(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) -> f_273(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) :|: 0 = 0 f_273(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) -> f_276(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) :|: TRUE f_276(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) -> f_279(v442, v443, v444, v450, 1, v512, 0, v448, v449, v445, v451, v452, 3, 4) :|: TRUE f_279(v442, v443, v444, v450, 1, v512, 0, v448, v449, v445, v451, v452, 3, 4) -> f_281(v442, v443, v444, v450, 1, v512, 0, v448, v449, v445, v451, v452, 3, 4) :|: v512 != 0 f_279(v442, v443, v444, v450, 1, v512, 0, v448, v449, v445, v451, v452, 3, 4) -> f_282(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) :|: v512 = 0 f_281(v442, v443, v444, v450, 1, v512, 0, v448, v449, v445, v451, v452, 3, 4) -> f_285(v442, v443, v444, v450, 1, v512, v448, v449, v445, v451, v452, 0, 3, 4) :|: 0 = 0 f_285(v442, v443, v444, v450, 1, v512, v448, v449, v445, v451, v452, 0, 3, 4) -> f_289(v442, v443, v444, v450, 1, v512, v448, v449, v445, v451, v452, 0, 3, 4) :|: TRUE f_289(v442, v443, v444, v450, 1, v512, v448, v449, v445, v451, v452, 0, 3, 4) -> f_293(v442, v443, v444, v450, 1, v512, v449, v445, v451, v452, 0, 3, 4) :|: 0 = 0 f_293(v442, v443, v444, v450, 1, v512, v449, v445, v451, v452, 0, 3, 4) -> f_297(v442, v443, v444, v450, 1, v512, v445, v451, v452, 0, 3, 4) :|: 1 + v445 = v450 f_297(v442, v443, v444, v450, 1, v512, v445, v451, v452, 0, 3, 4) -> f_301(v442, v443, v444, v450, 1, v512, v445, v451, v452, 0, 3, 4) :|: TRUE f_301(v442, v443, v444, v450, 1, v512, v445, v451, v452, 0, 3, 4) -> f_305(v442, v443, v444, v450, 1, v512, v445, v451, v452, 0, 3, 4) :|: TRUE f_305(v442, v443, v444, v450, 1, v512, v445, v451, v452, 0, 3, 4) -> f_264(v442, v443, v444, v450, 1, v512, v445, v450, v445, v451, v452, 0, 3, 4) :|: TRUE f_282(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) -> f_286(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) :|: 0 = 0 f_286(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) -> f_290(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) :|: TRUE f_290(v442, v443, v444, v450, 1, 0, v448, v449, v445, v451, v452, 3, 4) -> f_294(v442, v443, v444, v450, 1, 0, v448, v449, v451, v452, 3, 4) :|: 0 = 0 f_294(v442, v443, v444, v450, 1, 0, v448, v449, v451, v452, 3, 4) -> f_298(v442, v443, v444, v450, 1, 0, v448, v449, v548, v451, v452, 3, 4, 2) :|: v548 = 1 + v450 && 2 <= v548 f_298(v442, v443, v444, v450, 1, 0, v448, v449, v548, v451, v452, 3, 4, 2) -> f_302(v442, v443, v444, v450, 1, 0, v448, v449, v548, v451, v452, 3, 4, 2) :|: TRUE f_302(v442, v443, v444, v450, 1, 0, v448, v449, v548, v451, v452, 3, 4, 2) -> f_306(v442, v443, v444, v450, 1, 0, v448, v449, v548, v451, v452, 3, 4, 2) :|: TRUE f_306(v442, v443, v444, v450, 1, 0, v448, v449, v548, v451, v452, 3, 4, 2) -> f_266(v442, v443, v444, v450, 1, 0, v448, v449, v548, v451, v452, 3, 4) :|: TRUE f_69 -> f_70(v1, v2, 3, 1, 4) :|: 1 <= v1 && v2 = 3 + v1 && 4 <= v2 f_70(v1, v2, 3, 1, 4) -> f_71(v1, v3, v2, v4, 3, 1, 4) :|: 1 <= v3 && v4 = 3 + v3 && 4 <= v4 f_71(v1, v3, v2, v4, 3, 1, 4) -> f_72(v1, v3, v2, v4, 0, 3, 1, 4) :|: TRUE f_72(v1, v3, v2, v4, 0, 3, 1, 4) -> f_73(v1, v3, v5, v2, v4, 0, 3, 1, 4) :|: TRUE f_73(v1, v3, v5, v2, v4, 0, 3, 1, 4) -> f_74(v1, v3, v5, v2, v4, 0, 3, 1, 4) :|: TRUE f_74(v1, v3, v5, v2, v4, 0, 3, 1, 4) -> f_75(v1, v3, v5, v2, v4, 0, 3, 1, 4) :|: TRUE f_75(v1, v3, v5, v2, v4, 0, 3, 1, 4) -> f_76(v1, v3, v5, v2, v4, 0, 3, 1, 4) :|: 0 = 0 f_76(v1, v3, v5, v2, v4, 0, 3, 1, 4) -> f_77(v1, v3, v5, v2, v4, 0, 3, 1, 4) :|: 0 <= v5 f_77(v1, v3, v5, v2, v4, 0, 3, 1, 4) -> f_79(v1, v3, v5, 1, v2, v4, 0, 3, 4) :|: 0 = 0 f_79(v1, v3, v5, 1, v2, v4, 0, 3, 4) -> f_81(v1, v3, v5, 1, v2, v4, 0, 3, 4) :|: TRUE f_81(v1, v3, v5, 1, v2, v4, 0, 3, 4) -> f_83(v1, v3, v5, 1, v7, v2, v4, 0, 3, 4) :|: TRUE f_83(v1, v3, v5, 1, v7, v2, v4, 0, 3, 4) -> f_84(v1, v3, v5, 1, v7, v2, v4, 0, 3, 4) :|: v7 != 0 f_84(v1, v3, v5, 1, v7, v2, v4, 0, 3, 4) -> f_86(v1, v3, v5, 1, v7, v2, v4, 0, 3, 4) :|: 0 = 0 f_86(v1, v3, v5, 1, v7, v2, v4, 0, 3, 4) -> f_88(v1, v3, v5, 1, v7, v2, v4, 0, 3, 4) :|: TRUE f_88(v1, v3, v5, 1, v7, v2, v4, 0, 3, 4) -> f_90(v1, v3, v5, 1, v7, v2, v4, 0, 3, 4) :|: 0 = 0 f_90(v1, v3, v5, 1, v7, v2, v4, 0, 3, 4) -> f_92(v1, v3, v5, 1, v7, v8, v2, v4, 0, 3, 4) :|: 1 + v8 = v5 && 0 <= 1 + v8 f_92(v1, v3, v5, 1, v7, v8, v2, v4, 0, 3, 4) -> f_94(v1, v3, v5, 1, v7, v8, v2, v4, 0, 3, 4) :|: TRUE f_94(v1, v3, v5, 1, v7, v8, v2, v4, 0, 3, 4) -> f_96(v1, v3, v5, 1, v7, v8, v2, v4, 0, 3, 4) :|: TRUE f_96(v1, v3, v5, 1, v7, v8, v2, v4, 0, 3, 4) -> f_98(v1, v3, v5, 1, v7, v8, v2, v4, 0, 3, 4) :|: TRUE f_98(v1, v3, v5, 1, v7, v8, v2, v4, 0, 3, 4) -> f_143(v1, v3, v5, v5, 1, v7, v8, v2, v4, 0, 3, 4) :|: TRUE f_143(v75, v76, v77, v78, 1, v80, v81, v82, v83, 0, 3, 4) -> f_188(v75, v76, v77, v78, 1, v80, v81, v82, v83, 0, 3, 4) :|: TRUE f_188(v151, v152, v153, v154, 1, v156, v157, v158, v159, 0, 3, 4) -> f_190(v151, v152, v153, v157, 1, v156, v154, v158, v159, 0, 3, 4) :|: 0 = 0 f_190(v151, v152, v153, v157, 1, v156, v154, v158, v159, 0, 3, 4) -> f_192(v151, v152, v153, v157, 1, v156, v154, v158, v159, 0, 3, 4) :|: 0 <= v157 && 1 <= v154 && 1 <= v153 f_192(v151, v152, v153, v157, 1, v156, v154, v158, v159, 0, 3, 4) -> f_195(v151, v152, v153, v157, 1, v156, v154, v158, v159, 0, 3, 4) :|: 0 = 0 f_195(v151, v152, v153, v157, 1, v156, v154, v158, v159, 0, 3, 4) -> f_199(v151, v152, v153, v157, 1, v156, v154, v158, v159, 0, 3, 4) :|: TRUE f_199(v151, v152, v153, v157, 1, v156, v154, v158, v159, 0, 3, 4) -> f_203(v151, v152, v153, v157, 1, v171, v154, v158, v159, 0, 3, 4) :|: TRUE f_203(v151, v152, v153, v157, 1, v171, v154, v158, v159, 0, 3, 4) -> f_207(v151, v152, v153, v157, 1, 0, v154, v158, v159, 3, 4) :|: v171 = 0 f_207(v151, v152, v153, v157, 1, 0, v154, v158, v159, 3, 4) -> f_211(v151, v152, v153, v157, 1, 0, v154, v158, v159, 3, 4) :|: 0 = 0 f_211(v151, v152, v153, v157, 1, 0, v154, v158, v159, 3, 4) -> f_215(v151, v152, v153, v157, 1, 0, v154, v158, v159, 3, 4) :|: TRUE f_215(v151, v152, v153, v157, 1, 0, v154, v158, v159, 3, 4) -> f_219(v151, v152, v153, v157, 1, 0, v154, v158, v159, 3, 4) :|: 0 = 0 f_219(v151, v152, v153, v157, 1, 0, v154, v158, v159, 3, 4) -> f_223(v151, v152, v153, v157, 1, 0, v154, v158, v159, 3, 4) :|: v154 = 1 + v157 f_223(v151, v152, v153, v157, 1, 0, v154, v158, v159, 3, 4) -> f_226(v151, v152, v153, v157, 1, 0, v154, v158, v159, 3, 4) :|: TRUE f_226(v151, v152, v153, v157, 1, 0, v154, v158, v159, 3, 4) -> f_229(v151, v152, v153, v157, 1, 0, v154, v158, v159, 3, 4) :|: TRUE f_229(v151, v152, v153, v157, 1, 0, v154, v158, v159, 3, 4) -> f_266(v151, v152, v153, v157, 1, 0, v154, v157, v154, v158, v159, 3, 4) :|: TRUE Combined rules. Obtained 8 rulesP rules: f_267(v404:0, v405:0, v406:0, v407:0, 1, v409:0, v410:0, v411:0, 1 + v549:0, v413:0, v414:0, 0, 3, 4) -> f_267(v404:0, v405:0, v406:0, 1 + v549:0, 1, v513:0, v410:0, v411:0, v549:0, v413:0, v414:0, 0, 3, 4) :|: v407:0 > 0 && v549:0 > -2 && v513:0 < 0 f_267(v404:0, v405:0, v406:0, v407:0, 1, v409:0, v410:0, v411:0, 1 + v549:0, v413:0, v414:0, 0, 3, 4) -> f_267(v404:0, v405:0, v406:0, 1 + v549:0, 1, v513:0, v410:0, v411:0, v549:0, v413:0, v414:0, 0, 3, 4) :|: v407:0 > 0 && v549:0 > -2 && v513:0 > 0 f_279(v442:0, v443:0, v444:0, v450:0, 1, 0, 0, v448:0, v449:0, v445:0, v451:0, v452:0, 3, 4) -> f_279(v442:0, v443:0, v444:0, 1 + v450:0, 1, v512:1, 0, v448:0, v449:0, v450:0, v451:0, v452:0, 3, 4) :|: v450:0 > 0 f_279(v442:0, v443:0, v444:0, 1 + v445:0, 1, v512:0, 0, v448:0, v449:0, v445:0, v451:0, v452:0, 3, 4) -> f_267(v442:0, v443:0, v444:0, 1 + v445:0, 1, v512:0, v445:0, 1 + v445:0, v445:0, v451:0, v452:0, 0, 3, 4) :|: v512:0 < 0 f_279(v442:0, v443:0, v444:0, 1 + v445:0, 1, v512:0, 0, v448:0, v449:0, v445:0, v451:0, v452:0, 3, 4) -> f_267(v442:0, v443:0, v444:0, 1 + v445:0, 1, v512:0, v445:0, 1 + v445:0, v445:0, v451:0, v452:0, 0, 3, 4) :|: v512:0 > 0 f_267(v404:0, v405:0, v406:0, 1 + v412:0, 1, v409:0, v410:0, v411:0, v412:0, v413:0, v414:0, 0, 3, 4) -> f_279(v404:0, v405:0, v406:0, 1 + v412:0, 1, v512:0, 0, 1 + v412:0, v412:0, v412:0, v413:0, v414:0, 3, 4) :|: v412:0 > -1 f_69 -> f_279(v1:0, v3:0, 1 + v8:0, 1 + v8:0, 1, v512:0, 0, 1 + v8:0, v8:0, v8:0, 3 + v1:0, 3 + v3:0, 3, 4) :|: v8:0 > -1 && v3:0 > 0 && v1:0 > 0 && v7:0 < 0 f_69 -> f_279(v1:0, v3:0, 1 + v8:0, 1 + v8:0, 1, v512:0, 0, 1 + v8:0, v8:0, v8:0, 3 + v1:0, 3 + v3:0, 3, 4) :|: v8:0 > -1 && v3:0 > 0 && v1:0 > 0 && v7:0 > 0 Filtered unneeded arguments: f_267(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14) -> f_267(x4, x9) f_279(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14) -> f_279(x4, x6, x10) Removed division, modulo operations, cleaned up constraints. Obtained 6 rules.P rules: f_267(v407:0, sum~cons_1~v549:0) -> f_267(1 + v549:0, v549:0) :|: v407:0 > 0 && v549:0 > -2 && sum~cons_1~v549:0 = 1 + v549:0 f_279(v450:0, cons_0, v445:0) -> f_279(1 + v450:0, v512:1, v450:0) :|: v450:0 > 0 && cons_0 = 0 f_279(sum~cons_1~v445:0, v512:0, v445:0) -> f_267(1 + v445:0, v445:0) :|: v512:0 < 0 && sum~cons_1~v445:0 = 1 + v445:0 f_279(sum~cons_1~v445:0, v512:0, v445:0) -> f_267(1 + v445:0, v445:0) :|: v512:0 > 0 && sum~cons_1~v445:0 = 1 + v445:0 f_267(sum~cons_1~v412:0, v412:0) -> f_279(1 + v412:0, v512:0, v412:0) :|: v412:0 > -1 && sum~cons_1~v412:0 = 1 + v412:0 f_69 -> f_279(1 + v8:0, v512:0, v8:0) :|: v8:0 > -1 ---------------------------------------- (24) Obligation: Rules: f_267(v407:0, sum~cons_1~v549:0) -> f_267(1 + v549:0, v549:0) :|: v407:0 > 0 && v549:0 > -2 && sum~cons_1~v549:0 = 1 + v549:0 f_279(v450:0, cons_0, v445:0) -> f_279(1 + v450:0, v512:1, v450:0) :|: v450:0 > 0 && cons_0 = 0 f_279(x, x1, x2) -> f_267(1 + x2, x2) :|: x1 < 0 && x = 1 + x2 f_279(x3, x4, x5) -> f_267(1 + x5, x5) :|: x4 > 0 && x3 = 1 + x5 f_267(sum~cons_1~v412:0, v412:0) -> f_279(1 + v412:0, v512:0, v412:0) :|: v412:0 > -1 && sum~cons_1~v412:0 = 1 + v412:0 f_69 -> f_279(1 + x6, x7, x6) :|: x6 > -1 Start term: f_69 ---------------------------------------- (25) IRS2T2 (EQUIVALENT) Transformed input IRS into an integer transition system.Used the following mapping from defined symbols to location IDs: (f_267_3,1) (f_279_3,2) (f_69_3,3) ---------------------------------------- (26) Obligation: START: 3; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := oldX1 - 1; oldX4 := nondet(); assume(oldX0 > 0 && oldX3 > -2 && oldX1 = 1 + oldX3); x0 := 1 + oldX3; x1 := oldX1 - 1; x2 := oldX4; TO: 1; FROM: 2; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := nondet(); assume(oldX0 > 0 && oldX1 = 0); x0 := 1 + oldX0; x1 := oldX3; x2 := oldX0; TO: 2; FROM: 2; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := nondet(); assume(oldX1 < 0 && oldX0 = 1 + oldX2); x0 := 1 + oldX2; x1 := oldX2; x2 := oldX3; TO: 1; FROM: 2; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := nondet(); assume(oldX1 > 0 && oldX0 = 1 + oldX2); x0 := 1 + oldX2; x1 := oldX2; x2 := oldX3; TO: 1; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := nondet(); assume(oldX1 > -1 && oldX0 = 1 + oldX1); x0 := 1 + oldX1; x1 := oldX3; x2 := oldX1; TO: 2; FROM: 3; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := nondet(); oldX4 := nondet(); assume(oldX3 > -1); x0 := 1 + oldX3; x1 := oldX4; x2 := oldX3; TO: 2; ---------------------------------------- (27) Obligation: Lasso ---------------------------------------- (28) Lasso2IRS (EQUIVALENT) Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: Generated rules. Obtained 35 rulesP rules: f_190(v151, v152, v153, v157, 1, v156, v154, v158, v159, 0, 3, 4) -> f_192(v151, v152, v153, v157, 1, v156, v154, v158, v159, 0, 3, 4) :|: 0 <= v157 && 1 <= v154 && 1 <= v153 f_192(v151, v152, v153, v157, 1, v156, v154, v158, v159, 0, 3, 4) -> f_195(v151, v152, v153, v157, 1, v156, v154, v158, v159, 0, 3, 4) :|: 0 = 0 f_195(v151, v152, v153, v157, 1, v156, v154, v158, v159, 0, 3, 4) -> f_199(v151, v152, v153, v157, 1, v156, v154, v158, v159, 0, 3, 4) :|: TRUE f_199(v151, v152, v153, v157, 1, v156, v154, v158, v159, 0, 3, 4) -> f_203(v151, v152, v153, v157, 1, v171, v154, v158, v159, 0, 3, 4) :|: TRUE f_203(v151, v152, v153, v157, 1, v171, v154, v158, v159, 0, 3, 4) -> f_206(v151, v152, v153, v157, 1, v171, v154, v158, v159, 0, 3, 4) :|: v171 != 0 f_206(v151, v152, v153, v157, 1, v171, v154, v158, v159, 0, 3, 4) -> f_210(v151, v152, v153, v157, 1, v171, v154, v158, v159, 0, 3, 4) :|: 0 = 0 f_210(v151, v152, v153, v157, 1, v171, v154, v158, v159, 0, 3, 4) -> f_214(v151, v152, v153, v157, 1, v171, v154, v158, v159, 0, 3, 4) :|: TRUE f_214(v151, v152, v153, v157, 1, v171, v154, v158, v159, 0, 3, 4) -> f_218(v151, v152, v153, v157, 1, v171, v158, v159, 0, 3, 4) :|: 0 = 0 f_218(v151, v152, v153, v157, 1, v171, v158, v159, 0, 3, 4) -> f_222(v151, v152, v153, v157, 1, v171, v201, v158, v159, 0, 3, 4) :|: 1 + v201 = v157 && 0 <= 1 + v201 f_222(v151, v152, v153, v157, 1, v171, v201, v158, v159, 0, 3, 4) -> f_225(v151, v152, v153, v157, 1, v171, v201, v158, v159, 0, 3, 4) :|: TRUE f_225(v151, v152, v153, v157, 1, v171, v201, v158, v159, 0, 3, 4) -> f_228(v151, v152, v153, v157, 1, v171, v201, v158, v159, 0, 3, 4) :|: TRUE f_228(v151, v152, v153, v157, 1, v171, v201, v158, v159, 0, 3, 4) -> f_231(v151, v152, v153, v157, 1, v171, v201, v158, v159, 0, 3, 4) :|: TRUE f_231(v151, v152, v153, v157, 1, v171, v201, v158, v159, 0, 3, 4) -> f_188(v151, v152, v153, v157, 1, v171, v201, v158, v159, 0, 3, 4) :|: TRUE f_188(v151, v152, v153, v154, 1, v156, v157, v158, v159, 0, 3, 4) -> f_190(v151, v152, v153, v157, 1, v156, v154, v158, v159, 0, 3, 4) :|: 0 = 0 f_69 -> f_70(v1, v2, 3, 1, 4) :|: 1 <= v1 && v2 = 3 + v1 && 4 <= v2 f_70(v1, v2, 3, 1, 4) -> f_71(v1, v3, v2, v4, 3, 1, 4) :|: 1 <= v3 && v4 = 3 + v3 && 4 <= v4 f_71(v1, v3, v2, v4, 3, 1, 4) -> f_72(v1, v3, v2, v4, 0, 3, 1, 4) :|: TRUE f_72(v1, v3, v2, v4, 0, 3, 1, 4) -> f_73(v1, v3, v5, v2, v4, 0, 3, 1, 4) :|: TRUE f_73(v1, v3, v5, v2, v4, 0, 3, 1, 4) -> f_74(v1, v3, v5, v2, v4, 0, 3, 1, 4) :|: TRUE f_74(v1, v3, v5, v2, v4, 0, 3, 1, 4) -> f_75(v1, v3, v5, v2, v4, 0, 3, 1, 4) :|: TRUE f_75(v1, v3, v5, v2, v4, 0, 3, 1, 4) -> f_76(v1, v3, v5, v2, v4, 0, 3, 1, 4) :|: 0 = 0 f_76(v1, v3, v5, v2, v4, 0, 3, 1, 4) -> f_77(v1, v3, v5, v2, v4, 0, 3, 1, 4) :|: 0 <= v5 f_77(v1, v3, v5, v2, v4, 0, 3, 1, 4) -> f_79(v1, v3, v5, 1, v2, v4, 0, 3, 4) :|: 0 = 0 f_79(v1, v3, v5, 1, v2, v4, 0, 3, 4) -> f_81(v1, v3, v5, 1, v2, v4, 0, 3, 4) :|: TRUE f_81(v1, v3, v5, 1, v2, v4, 0, 3, 4) -> f_83(v1, v3, v5, 1, v7, v2, v4, 0, 3, 4) :|: TRUE f_83(v1, v3, v5, 1, v7, v2, v4, 0, 3, 4) -> f_84(v1, v3, v5, 1, v7, v2, v4, 0, 3, 4) :|: v7 != 0 f_84(v1, v3, v5, 1, v7, v2, v4, 0, 3, 4) -> f_86(v1, v3, v5, 1, v7, v2, v4, 0, 3, 4) :|: 0 = 0 f_86(v1, v3, v5, 1, v7, v2, v4, 0, 3, 4) -> f_88(v1, v3, v5, 1, v7, v2, v4, 0, 3, 4) :|: TRUE f_88(v1, v3, v5, 1, v7, v2, v4, 0, 3, 4) -> f_90(v1, v3, v5, 1, v7, v2, v4, 0, 3, 4) :|: 0 = 0 f_90(v1, v3, v5, 1, v7, v2, v4, 0, 3, 4) -> f_92(v1, v3, v5, 1, v7, v8, v2, v4, 0, 3, 4) :|: 1 + v8 = v5 && 0 <= 1 + v8 f_92(v1, v3, v5, 1, v7, v8, v2, v4, 0, 3, 4) -> f_94(v1, v3, v5, 1, v7, v8, v2, v4, 0, 3, 4) :|: TRUE f_94(v1, v3, v5, 1, v7, v8, v2, v4, 0, 3, 4) -> f_96(v1, v3, v5, 1, v7, v8, v2, v4, 0, 3, 4) :|: TRUE f_96(v1, v3, v5, 1, v7, v8, v2, v4, 0, 3, 4) -> f_98(v1, v3, v5, 1, v7, v8, v2, v4, 0, 3, 4) :|: TRUE f_98(v1, v3, v5, 1, v7, v8, v2, v4, 0, 3, 4) -> f_143(v1, v3, v5, v5, 1, v7, v8, v2, v4, 0, 3, 4) :|: TRUE f_143(v75, v76, v77, v78, 1, v80, v81, v82, v83, 0, 3, 4) -> f_188(v75, v76, v77, v78, 1, v80, v81, v82, v83, 0, 3, 4) :|: TRUE Combined rules. Obtained 4 rulesP rules: f_190(v151:0, v152:0, v153:0, 1 + v201:0, 1, v156:0, v154:0, v158:0, v159:0, 0, 3, 4) -> f_190(v151:0, v152:0, v153:0, v201:0, 1, v171:0, 1 + v201:0, v158:0, v159:0, 0, 3, 4) :|: v154:0 > 0 && v201:0 > -2 && v153:0 > 0 && v171:0 < 0 f_190(v151:0, v152:0, v153:0, 1 + v201:0, 1, v156:0, v154:0, v158:0, v159:0, 0, 3, 4) -> f_190(v151:0, v152:0, v153:0, v201:0, 1, v171:0, 1 + v201:0, v158:0, v159:0, 0, 3, 4) :|: v154:0 > 0 && v201:0 > -2 && v153:0 > 0 && v171:0 > 0 f_69 -> f_190(v1:0, v3:0, 1 + v8:0, v8:0, 1, v7:0, 1 + v8:0, 3 + v1:0, 3 + v3:0, 0, 3, 4) :|: v3:0 > 0 && v1:0 > 0 && v8:0 > -2 && v7:0 < 0 f_69 -> f_190(v1:0, v3:0, 1 + v8:0, v8:0, 1, v7:0, 1 + v8:0, 3 + v1:0, 3 + v3:0, 0, 3, 4) :|: v3:0 > 0 && v1:0 > 0 && v8:0 > -2 && v7:0 > 0 Filtered unneeded arguments: f_190(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12) -> f_190(x3, x4, x7) Removed division, modulo operations, cleaned up constraints. Obtained 2 rules.P rules: f_190(v153:0, sum~cons_1~v201:0, v154:0) -> f_190(v153:0, v201:0, 1 + v201:0) :|: v201:0 > -2 && v153:0 > 0 && v154:0 > 0 && sum~cons_1~v201:0 = 1 + v201:0 f_69 -> f_190(1 + v8:0, v8:0, 1 + v8:0) :|: v8:0 > -2 ---------------------------------------- (29) Obligation: Rules: f_190(v153:0, sum~cons_1~v201:0, v154:0) -> f_190(v153:0, v201:0, 1 + v201:0) :|: v201:0 > -2 && v153:0 > 0 && v154:0 > 0 && sum~cons_1~v201:0 = 1 + v201:0 f_69 -> f_190(1 + v8:0, v8:0, 1 + v8:0) :|: v8:0 > -2 Start term: f_69 ---------------------------------------- (30) IRS2T2 (EQUIVALENT) Transformed input IRS into an integer transition system.Used the following mapping from defined symbols to location IDs: (f_190_3,1) (f_69_3,2) ---------------------------------------- (31) Obligation: START: 2; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := oldX1 - 1; assume(oldX3 > -2 && oldX0 > 0 && oldX2 > 0 && oldX1 = 1 + oldX3); x0 := oldX0; x1 := oldX1 - 1; x2 := 1 + oldX3; TO: 1; FROM: 2; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := nondet(); assume(oldX3 > -2); x0 := 1 + oldX3; x1 := oldX3; x2 := 1 + oldX3; TO: 1; ---------------------------------------- (32) Obligation: Lasso ---------------------------------------- (33) Lasso2IRS (EQUIVALENT) Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: Generated rules. Obtained 33 rulesP rules: f_183(v112, v113, v114, v115, 1, 0, v118, v119, v120, 3, 4) -> f_186(v112, v113, v114, v118, 1, 0, v115, v119, v120, 3, 4) :|: 0 = 0 f_186(v112, v113, v114, v118, 1, 0, v115, v119, v120, 3, 4) -> f_189(v112, v113, v114, v118, 1, 0, v115, v119, v120, 3, 4) :|: 0 = 0 f_189(v112, v113, v114, v118, 1, 0, v115, v119, v120, 3, 4) -> f_191(v112, v113, v114, v118, 1, 0, v115, v119, v120, 3, 4) :|: TRUE f_191(v112, v113, v114, v118, 1, 0, v115, v119, v120, 3, 4) -> f_194(v112, v113, v114, v118, 1, v167, 0, v115, v119, v120, 3, 4) :|: TRUE f_194(v112, v113, v114, v118, 1, v167, 0, v115, v119, v120, 3, 4) -> f_198(v112, v113, v114, v118, 1, 0, v115, v119, v120, 3, 4) :|: v167 = 0 f_198(v112, v113, v114, v118, 1, 0, v115, v119, v120, 3, 4) -> f_202(v112, v113, v114, v118, 1, 0, v115, v119, v120, 3, 4) :|: 0 = 0 f_202(v112, v113, v114, v118, 1, 0, v115, v119, v120, 3, 4) -> f_205(v112, v113, v114, v118, 1, 0, v115, v119, v120, 3, 4) :|: TRUE f_205(v112, v113, v114, v118, 1, 0, v115, v119, v120, 3, 4) -> f_209(v112, v113, v114, v118, 1, 0, v119, v120, 3, 4) :|: 0 = 0 f_209(v112, v113, v114, v118, 1, 0, v119, v120, 3, 4) -> f_213(v112, v113, v114, v118, 1, 0, v172, v119, v120, 3, 4, 2) :|: v172 = 1 + v118 && 2 <= v172 f_213(v112, v113, v114, v118, 1, 0, v172, v119, v120, 3, 4, 2) -> f_217(v112, v113, v114, v118, 1, 0, v172, v119, v120, 3, 4, 2) :|: TRUE f_217(v112, v113, v114, v118, 1, 0, v172, v119, v120, 3, 4, 2) -> f_221(v112, v113, v114, v118, 1, 0, v172, v119, v120, 3, 4, 2) :|: TRUE f_221(v112, v113, v114, v118, 1, 0, v172, v119, v120, 3, 4, 2) -> f_180(v112, v113, v114, v118, 1, 0, v172, v119, v120, 3, 4) :|: TRUE f_180(v112, v113, v114, v115, 1, 0, v118, v119, v120, 3, 4) -> f_183(v112, v113, v114, v115, 1, 0, v118, v119, v120, 3, 4) :|: TRUE f_69 -> f_70(v1, v2, 3, 1, 4) :|: 1 <= v1 && v2 = 3 + v1 && 4 <= v2 f_70(v1, v2, 3, 1, 4) -> f_71(v1, v3, v2, v4, 3, 1, 4) :|: 1 <= v3 && v4 = 3 + v3 && 4 <= v4 f_71(v1, v3, v2, v4, 3, 1, 4) -> f_72(v1, v3, v2, v4, 0, 3, 1, 4) :|: TRUE f_72(v1, v3, v2, v4, 0, 3, 1, 4) -> f_73(v1, v3, v5, v2, v4, 0, 3, 1, 4) :|: TRUE f_73(v1, v3, v5, v2, v4, 0, 3, 1, 4) -> f_74(v1, v3, v5, v2, v4, 0, 3, 1, 4) :|: TRUE f_74(v1, v3, v5, v2, v4, 0, 3, 1, 4) -> f_75(v1, v3, v5, v2, v4, 0, 3, 1, 4) :|: TRUE f_75(v1, v3, v5, v2, v4, 0, 3, 1, 4) -> f_76(v1, v3, v5, v2, v4, 0, 3, 1, 4) :|: 0 = 0 f_76(v1, v3, v5, v2, v4, 0, 3, 1, 4) -> f_77(v1, v3, v5, v2, v4, 0, 3, 1, 4) :|: 0 <= v5 f_77(v1, v3, v5, v2, v4, 0, 3, 1, 4) -> f_79(v1, v3, v5, 1, v2, v4, 0, 3, 4) :|: 0 = 0 f_79(v1, v3, v5, 1, v2, v4, 0, 3, 4) -> f_81(v1, v3, v5, 1, v2, v4, 0, 3, 4) :|: TRUE f_81(v1, v3, v5, 1, v2, v4, 0, 3, 4) -> f_83(v1, v3, v5, 1, v7, v2, v4, 0, 3, 4) :|: TRUE f_83(v1, v3, v5, 1, v7, v2, v4, 0, 3, 4) -> f_85(v1, v3, v5, 1, 0, v2, v4, 3, 4) :|: v7 = 0 f_85(v1, v3, v5, 1, 0, v2, v4, 3, 4) -> f_87(v1, v3, v5, 1, 0, v2, v4, 3, 4) :|: 0 = 0 f_87(v1, v3, v5, 1, 0, v2, v4, 3, 4) -> f_89(v1, v3, v5, 1, 0, v2, v4, 3, 4) :|: TRUE f_89(v1, v3, v5, 1, 0, v2, v4, 3, 4) -> f_91(v1, v3, v5, 1, 0, v2, v4, 3, 4) :|: 0 = 0 f_91(v1, v3, v5, 1, 0, v2, v4, 3, 4) -> f_93(v1, v3, v5, 1, 0, v9, v2, v4, 3, 4) :|: v9 = 1 + v5 && 1 <= v9 f_93(v1, v3, v5, 1, 0, v9, v2, v4, 3, 4) -> f_95(v1, v3, v5, 1, 0, v9, v2, v4, 3, 4) :|: TRUE f_95(v1, v3, v5, 1, 0, v9, v2, v4, 3, 4) -> f_97(v1, v3, v5, 1, 0, v9, v2, v4, 3, 4) :|: TRUE f_97(v1, v3, v5, 1, 0, v9, v2, v4, 3, 4) -> f_138(v1, v3, v5, v5, 1, 0, v9, v2, v4, 3, 4) :|: TRUE f_138(v39, v40, v41, v42, 1, 0, v45, v46, v47, 3, 4) -> f_180(v39, v40, v41, v42, 1, 0, v45, v46, v47, 3, 4) :|: TRUE Combined rules. Obtained 2 rulesP rules: f_183(v112:0, v113:0, v114:0, v115:0, 1, 0, v118:0, v119:0, v120:0, 3, 4) -> f_183(v112:0, v113:0, v114:0, v118:0, 1, 0, 1 + v118:0, v119:0, v120:0, 3, 4) :|: v118:0 > 0 f_69 -> f_183(v1:0, v3:0, v5:0, v5:0, 1, 0, 1 + v5:0, 3 + v1:0, 3 + v3:0, 3, 4) :|: v3:0 > 0 && v1:0 > 0 && v5:0 > -1 Filtered unneeded arguments: f_183(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11) -> f_183(x7) Removed division, modulo operations, cleaned up constraints. Obtained 2 rules.P rules: f_183(v118:0) -> f_183(1 + v118:0) :|: v118:0 > 0 f_69 -> f_183(1 + v5:0) :|: v5:0 > -1 ---------------------------------------- (34) Obligation: Rules: f_183(v118:0) -> f_183(1 + v118:0) :|: v118:0 > 0 f_69 -> f_183(1 + v5:0) :|: v5:0 > -1 Start term: f_69 ---------------------------------------- (35) IRS2T2 (EQUIVALENT) Transformed input IRS into an integer transition system.Used the following mapping from defined symbols to location IDs: (f_183_1,1) (f_69_1,2) ---------------------------------------- (36) Obligation: START: 2; FROM: 1; oldX0 := x0; assume(oldX0 > 0); x0 := 1 + oldX0; TO: 1; FROM: 2; oldX0 := x0; oldX1 := nondet(); assume(oldX1 > -1); x0 := 1 + oldX1; TO: 1; ---------------------------------------- (37) T2 (COMPLETE) Found this recurrent set for cutpoint 5: 0 <= oldX1 and 1 <= x0 and oldX1-x0 <= -1 and 1 <= oldX1+x0 and -x0+1 <= 0 ---------------------------------------- (38) NO