/export/starexec/sandbox2/solver/bin/starexec_run_c /export/starexec/sandbox2/benchmark/theBenchmark.c /export/starexec/sandbox2/output/output_files -------------------------------------------------------------------------------- YES proof of /export/starexec/sandbox2/benchmark/theBenchmark.c # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty Termination of the given C Problem could be proven: (0) C Problem (1) CToLLVMProof [EQUIVALENT, 158 ms] (2) LLVM problem (3) LLVMToTerminationGraphProof [EQUIVALENT, 6800 ms] (4) LLVM Symbolic Execution Graph (5) SymbolicExecutionGraphToSCCProof [SOUND, 2 ms] (6) AND (7) LLVM Symbolic Execution SCC (8) SCC2IRS [SOUND, 44 ms] (9) IntTRS (10) IRS2T2 [EQUIVALENT, 0 ms] (11) T2IntSys (12) T2 [EQUIVALENT, 2 ms] (13) YES (14) LLVM Symbolic Execution SCC (15) SCC2IRS [SOUND, 3 ms] (16) IntTRS (17) IRS2T2 [EQUIVALENT, 0 ms] (18) T2IntSys (19) T2 [EQUIVALENT, 3 ms] (20) YES (21) LLVM Symbolic Execution SCC (22) SCC2IRS [SOUND, 14 ms] (23) IntTRS (24) IRS2T2 [EQUIVALENT, 0 ms] (25) T2IntSys (26) T2 [EQUIVALENT, 1 ms] (27) YES (28) LLVM Symbolic Execution SCC (29) SCC2IRS [SOUND, 10 ms] (30) IntTRS (31) IRS2T2 [EQUIVALENT, 0 ms] (32) T2IntSys (33) T2 [EQUIVALENT, 4 ms] (34) YES (35) LLVM Symbolic Execution SCC (36) SCC2IRS [SOUND, 47 ms] (37) IntTRS (38) IRS2T2 [EQUIVALENT, 0 ms] (39) T2IntSys (40) T2 [EQUIVALENT, 2 ms] (41) YES (42) LLVM Symbolic Execution SCC (43) SCC2IRS [SOUND, 2 ms] (44) IntTRS (45) IRS2T2 [EQUIVALENT, 0 ms] (46) T2IntSys (47) T2 [EQUIVALENT, 3 ms] (48) YES (49) LLVM Symbolic Execution SCC (50) SCC2IRS [SOUND, 35 ms] (51) IntTRS (52) IRS2T2 [EQUIVALENT, 0 ms] (53) T2IntSys (54) T2 [EQUIVALENT, 2 ms] (55) YES (56) LLVM Symbolic Execution SCC (57) SCC2IRS [SOUND, 1 ms] (58) IntTRS (59) IntTRSCompressionProof [EQUIVALENT, 0 ms] (60) IntTRS (61) RankingReductionPairProof [EQUIVALENT, 0 ms] (62) YES (63) LLVM Symbolic Execution SCC (64) SCC2IRS [SOUND, 13 ms] (65) IntTRS (66) IRS2T2 [EQUIVALENT, 0 ms] (67) T2IntSys (68) T2 [EQUIVALENT, 2 ms] (69) YES (70) LLVM Symbolic Execution SCC (71) SCC2IRS [SOUND, 12 ms] (72) IntTRS (73) IRS2T2 [EQUIVALENT, 0 ms] (74) T2IntSys (75) T2 [EQUIVALENT, 2 ms] (76) YES (77) LLVM Symbolic Execution SCC (78) SCC2IRS [SOUND, 18 ms] (79) IntTRS (80) IRS2T2 [EQUIVALENT, 0 ms] (81) T2IntSys (82) T2 [EQUIVALENT, 1 ms] (83) YES (84) LLVM Symbolic Execution SCC (85) SCC2IRS [SOUND, 10 ms] (86) IntTRS (87) IRS2T2 [EQUIVALENT, 0 ms] (88) T2IntSys (89) T2 [EQUIVALENT, 3 ms] (90) YES (91) LLVM Symbolic Execution SCC (92) SCC2IRS [SOUND, 3 ms] (93) IntTRS (94) IRS2T2 [EQUIVALENT, 0 ms] (95) T2IntSys (96) T2 [EQUIVALENT, 1 ms] (97) YES (98) LLVM Symbolic Execution SCC (99) SCC2IRS [SOUND, 4 ms] (100) IntTRS (101) IntTRSCompressionProof [EQUIVALENT, 0 ms] (102) IntTRS (103) RankingReductionPairProof [EQUIVALENT, 2 ms] (104) YES ---------------------------------------- (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: false 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 %y = alloca i32, align 4 store 0, %1 %2 = call i32 @__VERIFIER_nondet_int() store %2, %x %3 = call i32 @__VERIFIER_nondet_int() store %3, %y br %4 4: %5 = load %x %6 = icmp ne %5 0 br %6, %7, %10 7: %8 = load %y %9 = icmp sgt %8 0 br %10 10: %11 = phi [0, %4], [%9, %7] br %11, %12, %38 12: %13 = load %x %14 = icmp sgt %13 0 br %14, %15, %26 15: %16 = call i32 @__VERIFIER_nondet_int() %17 = icmp ne %16 0 br %17, %18, %22 18: %19 = load %x %20 = sub %19 1 store %20, %x %21 = call i32 @__VERIFIER_nondet_int() store %21, %y br %25 22: %23 = load %y %24 = sub %23 1 store %24, %y br %25 25: br %37 26: %27 = call i32 @__VERIFIER_nondet_int() %28 = icmp ne %27 0 br %28, %29, %32 29: %30 = load %x %31 = add %30 1 store %31, %x br %36 32: %33 = load %y %34 = sub %33 1 store %34, %y %35 = call i32 @__VERIFIER_nondet_int() store %35, %x br %36 36: br %37 37: br %4 38: 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) SymbolicExecutionGraphToSCCProof (SOUND) Splitted symbolic execution graph to 14 SCCs. ---------------------------------------- (6) Complex Obligation (AND) ---------------------------------------- (7) Obligation: SCC ---------------------------------------- (8) SCC2IRS (SOUND) Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: Generated rules. Obtained 56 rulesP rules: f_2196(v55617, v55618, v55619, v55620, v55621, v55622, 1, v55624, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55635, v55636, v55637, v55638, 3, 2, 4) -> f_2198(v55617, v55618, v55619, v55620, v55621, v55622, 1, v55624, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55830, v55635, v55636, v55637, v55638, 3, 2, 4) :|: 1 + v55830 = v55622 && 0 <= v55830 f_2198(v55617, v55618, v55619, v55620, v55621, v55622, 1, v55624, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55830, v55635, v55636, v55637, v55638, 3, 2, 4) -> f_2200(v55617, v55618, v55619, v55620, v55621, v55622, 1, v55624, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55830, v55635, v55636, v55637, v55638, 3, 2, 4) :|: TRUE f_2200(v55617, v55618, v55619, v55620, v55621, v55622, 1, v55624, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55830, v55635, v55636, v55637, v55638, 3, 2, 4) -> f_2202(v55617, v55618, v55619, v55620, v55621, v55622, 1, v55624, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55830, v55834, v55636, v55637, v55638, 3, 2, 4) :|: TRUE f_2202(v55617, v55618, v55619, v55620, v55621, v55622, 1, v55624, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55830, v55834, v55636, v55637, v55638, 3, 2, 4) -> f_2205(v55617, v55618, v55619, v55620, v55621, v55622, 1, v55624, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55830, v55834, v55636, v55637, v55638, 3, 2, 4) :|: TRUE f_2205(v55617, v55618, v55619, v55620, v55621, v55622, 1, v55624, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55830, v55834, v55636, v55637, v55638, 3, 2, 4) -> f_2207(v55617, v55618, v55619, v55620, v55621, v55622, 1, v55624, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55830, v55834, v55636, v55637, v55638, 3, 2, 4) :|: TRUE f_2207(v55617, v55618, v55619, v55620, v55621, v55622, 1, v55624, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55830, v55834, v55636, v55637, v55638, 3, 2, 4) -> f_2209(v55617, v55618, v55619, v55620, v55621, v55622, 1, v55624, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55830, v55834, v55636, v55637, v55638, 3, 2, 4) :|: TRUE f_2209(v55617, v55618, v55619, v55620, v55621, v55622, 1, v55624, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55830, v55834, v55636, v55637, v55638, 3, 2, 4) -> f_2211(v55617, v55618, v55619, v55620, v55621, v55622, 1, v55624, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55830, v55834, v55636, v55637, v55638, 3, 2, 4) :|: TRUE f_2211(v55617, v55618, v55619, v55620, v55621, v55622, 1, v55624, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55830, v55834, v55636, v55637, v55638, 3, 2, 4) -> f_2213(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55624, v55622, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55834, v55636, v55637, v55638, 3, 2, 4) :|: 0 = 0 f_2213(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55624, v55622, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55834, v55636, v55637, v55638, 3, 2, 4) -> f_2215(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55624, v55622, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55834, v55636, v55637, v55638, 3, 2, 4) :|: v55830 != 0 && 2 <= v55622 && 3 <= v55630 f_2215(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55624, v55622, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55834, v55636, v55637, v55638, 3, 2, 4) -> f_2218(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55624, v55622, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55834, v55636, v55637, v55638, 3, 2, 4) :|: 0 = 0 f_2218(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55624, v55622, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55834, v55636, v55637, v55638, 3, 2, 4) -> f_2222(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55624, v55622, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55834, v55636, v55637, v55638, 3, 2, 4) :|: TRUE f_2222(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55624, v55622, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55834, v55636, v55637, v55638, 3, 2, 4) -> f_2226(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55834, v55622, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55636, v55637, v55638, 3, 2, 4) :|: 0 = 0 f_2226(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55834, v55622, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55636, v55637, v55638, 3, 2, 4) -> f_2230(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55834, v55622, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55636, v55637, v55638, 3, 2, 4) :|: 0 < v55834 f_2230(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55834, v55622, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55636, v55637, v55638, 3, 2, 4) -> f_2234(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55834, v55622, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55636, v55637, v55638, 3, 2, 4) :|: 0 = 0 f_2234(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55834, v55622, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55636, v55637, v55638, 3, 2, 4) -> f_2237(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55834, v55622, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55636, v55637, v55638, 3, 2, 4) :|: 0 = 0 f_2237(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55834, v55622, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55636, v55637, v55638, 3, 2, 4) -> f_2240(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55834, v55622, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55636, v55637, v55638, 3, 2, 4) :|: TRUE f_2240(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55834, v55622, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55636, v55637, v55638, 3, 2, 4) -> f_2243(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55834, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55622, v55636, v55637, v55638, 3, 2, 4) :|: 0 = 0 f_2243(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55834, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55622, v55636, v55637, v55638, 3, 2, 4) -> f_2245(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55834, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55622, v55636, v55637, v55638, 3, 2, 4) :|: 0 = 0 f_2245(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55834, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55622, v55636, v55637, v55638, 3, 2, 4) -> f_2248(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55834, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55622, v55636, v55637, v55638, 3, 2, 4) :|: TRUE f_2248(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55834, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55622, v55636, v55637, v55638, 3, 2, 4) -> f_2251(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55834, 0, v55626, v55627, v55628, v55629, v55630, v59678, v55632, v55633, v55622, v55636, v55637, v55638, 3, 2, 4) :|: TRUE f_2251(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55834, 0, v55626, v55627, v55628, v55629, v55630, v59678, v55632, v55633, v55622, v55636, v55637, v55638, 3, 2, 4) -> f_2254(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55834, 0, v55626, v55627, v55628, v55629, v55630, v59678, v55632, v55633, v55622, v55636, v55637, v55638, 3, 2, 4) :|: v59678 != 0 f_2251(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55834, 0, v55626, v55627, v55628, v55629, v55630, v59678, v55632, v55633, v55622, v55636, v55637, v55638, 3, 2, 4) -> f_2255(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55834, 0, v55626, v55627, v55628, v55629, v55630, v55632, v55633, v55622, v55636, v55637, v55638, 3, 2, 4) :|: v59678 = 0 f_2254(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55834, 0, v55626, v55627, v55628, v55629, v55630, v59678, v55632, v55633, v55622, v55636, v55637, v55638, 3, 2, 4) -> f_2256(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55834, 0, v55626, v55627, v55628, v55629, v55630, v59678, v55632, v55633, v55622, v55636, v55637, v55638, 3, 2, 4) :|: 0 = 0 f_2256(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55834, 0, v55626, v55627, v55628, v55629, v55630, v59678, v55632, v55633, v55622, v55636, v55637, v55638, 3, 2, 4) -> f_2258(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55834, 0, v55626, v55627, v55628, v55629, v55630, v59678, v55632, v55633, v55622, v55636, v55637, v55638, 3, 2, 4) :|: TRUE f_2258(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55834, 0, v55626, v55627, v55628, v55629, v55630, v59678, v55632, v55633, v55622, v55636, v55637, v55638, 3, 2, 4) -> f_2193(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55834, 0, v55626, v55627, v55628, v55629, v55630, v59678, v55632, v55633, v55622, v55834, v55636, v55637, v55638, 3, 2, 4) :|: TRUE f_2193(v55617, v55618, v55619, v55620, v55621, v55622, 1, v55624, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55634, v55635, v55636, v55637, v55638, 3, 2, 4) -> f_2196(v55617, v55618, v55619, v55620, v55621, v55622, 1, v55624, 0, v55626, v55627, v55628, v55629, v55630, v55631, v55632, v55633, v55635, v55636, v55637, v55638, 3, 2, 4) :|: 0 = 0 f_2255(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55834, 0, v55626, v55627, v55628, v55629, v55630, v55632, v55633, v55622, v55636, v55637, v55638, 3, 2, 4) -> f_2257(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55834, 0, v55626, v55627, v55628, v55629, v55630, v55632, v55633, v55622, v55636, v55637, v55638, 3, 2, 4) :|: 0 = 0 f_2257(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55834, 0, v55626, v55627, v55628, v55629, v55630, v55632, v55633, v55622, v55636, v55637, v55638, 3, 2, 4) -> f_2259(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55834, 0, v55626, v55627, v55628, v55629, v55630, v55632, v55633, v55622, v55636, v55637, v55638, 3, 2, 4) :|: TRUE f_2259(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55834, 0, v55626, v55627, v55628, v55629, v55630, v55632, v55633, v55622, v55636, v55637, v55638, 3, 2, 4) -> f_2195(v55617, v55618, v55619, v55620, v55621, v55830, 1, v55834, 0, v55626, v55627, v55628, v55629, v55630, v55632, v55633, v55622, v55834, v55636, v55637, v55638, 3, 2, 4) :|: TRUE f_2195(v55809, v55810, v55811, v55812, v55813, v55814, 1, v55816, 0, v55818, v55819, v55820, v55821, v55822, v55823, v55824, v55825, v55826, v55827, v55828, v55829, 3, 2, 4) -> f_2197(v55809, v55810, v55811, v55812, v55813, v55814, 1, v55816, 0, v55818, v55819, v55820, v55821, v55822, v55824, v55825, v55826, v55827, v55828, v55829, 3, 2, 4) :|: 0 = 0 f_2197(v55809, v55810, v55811, v55812, v55813, v55814, 1, v55816, 0, v55818, v55819, v55820, v55821, v55822, v55824, v55825, v55826, v55827, v55828, v55829, 3, 2, 4) -> f_2199(v55809, v55810, v55811, v55812, v55813, v55814, 1, v55816, 0, v55818, v55819, v55820, v55821, v55822, v55831, v55825, v55826, v55827, v55828, v55829, 3, 2, 4) :|: 1 + v55831 = v55816 && 0 <= v55831 f_2199(v55809, v55810, v55811, v55812, v55813, v55814, 1, v55816, 0, v55818, v55819, v55820, v55821, v55822, v55831, v55825, v55826, v55827, v55828, v55829, 3, 2, 4) -> f_2201(v55809, v55810, v55811, v55812, v55813, v55814, 1, v55816, 0, v55818, v55819, v55820, v55821, v55822, v55831, v55825, v55826, v55827, v55828, v55829, 3, 2, 4) :|: TRUE f_2201(v55809, v55810, v55811, v55812, v55813, v55814, 1, v55816, 0, v55818, v55819, v55820, v55821, v55822, v55831, v55825, v55826, v55827, v55828, v55829, 3, 2, 4) -> f_2203(v55809, v55810, v55811, v55812, v55813, v55814, 1, v55816, 0, v55818, v55819, v55820, v55821, v55822, v55831, v55825, v55826, v55827, v55828, v55829, 3, 2, 4) :|: TRUE f_2203(v55809, v55810, v55811, v55812, v55813, v55814, 1, v55816, 0, v55818, v55819, v55820, v55821, v55822, v55831, v55825, v55826, v55827, v55828, v55829, 3, 2, 4) -> f_2204(v55809, v55810, v55811, v55812, v55813, v55814, 1, v55816, 0, v55818, v55819, v55820, v55821, v55822, v55825, v55826, v55831, v55827, v55828, v55829, 3, 2, 4) :|: TRUE f_2204(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56057, 0, v56059, v56060, v56061, v56062, v56063, v56064, v56065, v56066, v56067, v56068, v56069, 3, 2, 4) -> f_2206(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56057, 0, v56059, v56060, v56061, v56062, v56063, v56064, v56065, v56066, v56067, v56068, v56069, 3, 2, 4) :|: TRUE f_2206(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56057, 0, v56059, v56060, v56061, v56062, v56063, v56064, v56065, v56066, v56067, v56068, v56069, 3, 2, 4) -> f_2208(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56057, 0, v56059, v56060, v56061, v56062, v56063, v56064, v56065, v56066, v56067, v56068, v56069, 3, 2, 4) :|: TRUE f_2208(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56057, 0, v56059, v56060, v56061, v56062, v56063, v56064, v56065, v56066, v56067, v56068, v56069, 3, 2, 4) -> f_2210(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56057, 0, v56059, v56060, v56061, v56062, v56063, v56064, v56065, v56066, v56067, v56068, v56069, 3, 2, 4) :|: 0 = 0 f_2210(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56057, 0, v56059, v56060, v56061, v56062, v56063, v56064, v56065, v56066, v56067, v56068, v56069, 3, 2, 4) -> f_2212(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56057, 0, v56059, v56060, v56061, v56062, v56063, v56064, v56065, v56066, v56067, v56068, v56069, 3, 2, 4) :|: 0 = 0 f_2212(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56057, 0, v56059, v56060, v56061, v56062, v56063, v56064, v56065, v56066, v56067, v56068, v56069, 3, 2, 4) -> f_2214(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56057, 0, v56059, v56060, v56061, v56062, v56063, v56064, v56065, v56066, v56067, v56068, v56069, 3, 2, 4) :|: TRUE f_2214(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56057, 0, v56059, v56060, v56061, v56062, v56063, v56064, v56065, v56066, v56067, v56068, v56069, 3, 2, 4) -> f_2217(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56066, 0, v56059, v56060, v56061, v56062, v56063, v56064, v56065, v56057, v56067, v56068, v56069, 3, 2, 4) :|: 0 = 0 f_2217(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56066, 0, v56059, v56060, v56061, v56062, v56063, v56064, v56065, v56057, v56067, v56068, v56069, 3, 2, 4) -> f_2220(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56066, 0, v56059, v56060, v56061, v56062, v56063, v56064, v56065, v56057, v56067, v56068, v56069, 3, 2, 4) :|: 0 < v56066 && 2 <= v56057 && 2 <= v56065 f_2220(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56066, 0, v56059, v56060, v56061, v56062, v56063, v56064, v56065, v56057, v56067, v56068, v56069, 3, 2, 4) -> f_2224(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56066, 0, v56059, v56060, v56061, v56062, v56063, v56064, v56065, v56057, v56067, v56068, v56069, 3, 2, 4) :|: 0 = 0 f_2224(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56066, 0, v56059, v56060, v56061, v56062, v56063, v56064, v56065, v56057, v56067, v56068, v56069, 3, 2, 4) -> f_2228(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56066, 0, v56059, v56060, v56061, v56062, v56063, v56064, v56065, v56057, v56067, v56068, v56069, 3, 2, 4) :|: 0 = 0 f_2228(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56066, 0, v56059, v56060, v56061, v56062, v56063, v56064, v56065, v56057, v56067, v56068, v56069, 3, 2, 4) -> f_2232(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56066, 0, v56059, v56060, v56061, v56062, v56063, v56064, v56065, v56057, v56067, v56068, v56069, 3, 2, 4) :|: TRUE f_2232(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56066, 0, v56059, v56060, v56061, v56062, v56063, v56064, v56065, v56057, v56067, v56068, v56069, 3, 2, 4) -> f_2236(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56066, 0, v56059, v56060, v56061, v56062, v56063, v56064, v56065, v56057, v56067, v56068, v56069, 3, 2, 4) :|: 0 = 0 f_2236(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56066, 0, v56059, v56060, v56061, v56062, v56063, v56064, v56065, v56057, v56067, v56068, v56069, 3, 2, 4) -> f_2239(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56066, 0, v56059, v56060, v56061, v56062, v56063, v56064, v56065, v56057, v56067, v56068, v56069, 3, 2, 4) :|: 0 = 0 f_2239(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56066, 0, v56059, v56060, v56061, v56062, v56063, v56064, v56065, v56057, v56067, v56068, v56069, 3, 2, 4) -> f_2242(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56066, 0, v56059, v56060, v56061, v56062, v56063, v56064, v56065, v56057, v56067, v56068, v56069, 3, 2, 4) :|: TRUE f_2242(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56066, 0, v56059, v56060, v56061, v56062, v56063, v56064, v56065, v56057, v56067, v56068, v56069, 3, 2, 4) -> f_2244(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56066, 0, v56059, v56060, v56061, v56062, v56063, v59531, v56064, v56065, v56057, v56067, v56068, v56069, 3, 2, 4) :|: TRUE f_2244(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56066, 0, v56059, v56060, v56061, v56062, v56063, v59531, v56064, v56065, v56057, v56067, v56068, v56069, 3, 2, 4) -> f_2246(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56066, 0, v56059, v56060, v56061, v56062, v56063, v59531, v56064, v56065, v56057, v56067, v56068, v56069, 3, 2, 4) :|: v59531 != 0 f_2244(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56066, 0, v56059, v56060, v56061, v56062, v56063, v59531, v56064, v56065, v56057, v56067, v56068, v56069, 3, 2, 4) -> f_2247(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56066, 0, v56059, v56060, v56061, v56062, v56063, v56064, v56065, v56057, v56067, v56068, v56069, 3, 2, 4) :|: v59531 = 0 f_2246(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56066, 0, v56059, v56060, v56061, v56062, v56063, v59531, v56064, v56065, v56057, v56067, v56068, v56069, 3, 2, 4) -> f_2249(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56066, 0, v56059, v56060, v56061, v56062, v56063, v59531, v56064, v56065, v56057, v56067, v56068, v56069, 3, 2, 4) :|: 0 = 0 f_2249(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56066, 0, v56059, v56060, v56061, v56062, v56063, v59531, v56064, v56065, v56057, v56067, v56068, v56069, 3, 2, 4) -> f_2252(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56066, 0, v56059, v56060, v56061, v56062, v56063, v59531, v56064, v56065, v56057, v56067, v56068, v56069, 3, 2, 4) :|: TRUE f_2252(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56066, 0, v56059, v56060, v56061, v56062, v56063, v59531, v56064, v56065, v56057, v56067, v56068, v56069, 3, 2, 4) -> f_2193(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56066, 0, v56059, v56060, v56061, v56062, v56063, v59531, v56057, v56066, v56064, v56065, v56067, v56068, v56069, 3, 2, 4) :|: TRUE f_2247(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56066, 0, v56059, v56060, v56061, v56062, v56063, v56064, v56065, v56057, v56067, v56068, v56069, 3, 2, 4) -> f_2250(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56066, 0, v56059, v56060, v56061, v56062, v56063, v56064, v56065, v56057, v56067, v56068, v56069, 3, 2, 4) :|: 0 = 0 f_2250(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56066, 0, v56059, v56060, v56061, v56062, v56063, v56064, v56065, v56057, v56067, v56068, v56069, 3, 2, 4) -> f_2253(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56066, 0, v56059, v56060, v56061, v56062, v56063, v56064, v56065, v56057, v56067, v56068, v56069, 3, 2, 4) :|: TRUE f_2253(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56066, 0, v56059, v56060, v56061, v56062, v56063, v56064, v56065, v56057, v56067, v56068, v56069, 3, 2, 4) -> f_2195(v56050, v56051, v56052, v56053, v56054, v56055, 1, v56066, 0, v56059, v56060, v56061, v56062, v56063, v56057, v56066, v56064, v56065, v56067, v56068, v56069, 3, 2, 4) :|: TRUE Combined rules. Obtained 6 rulesP rules: f_2196(v55617:0, v55618:0, v55619:0, v55620:0, v55621:0, 1 + v55830:0, 1, v55624:0, 0, v55626:0, v55627:0, v55628:0, v55629:0, v55630:0, v55631:0, v55632:0, v55633:0, v55635:0, v55636:0, v55637:0, v55638:0, 3, 2, 4) -> f_2244(v55617:0, v55618:0, v55619:0, v55620:0, v55621:0, v55830:0, 1, v55831:0, 0, v55626:0, v55627:0, v55628:0, v55629:0, v55630:0, v59531:0, 1 + v55830:0, 1 + v55831:0, 1 + v55831:0, v55636:0, v55637:0, v55638:0, 3, 2, 4) :|: v55830:0 > 0 && v55831:0 > 0 && v55630:0 > 2 f_2244(v56050:0, v56051:0, v56052:0, v56053:0, v56054:0, v56055:0, 1, 1 + v55831:0, 0, v56059:0, v56060:0, v56061:0, v56062:0, v56063:0, 0, v56064:0, v56065:0, v56057:0, v56067:0, v56068:0, v56069:0, 3, 2, 4) -> f_2244(v56050:0, v56051:0, v56052:0, v56053:0, v56054:0, v56055:0, 1, v55831:0, 0, v56059:0, v56060:0, v56061:0, v56062:0, v56063:0, v59531:1, v56064:0, v56065:0, 1 + v55831:0, v56067:0, v56068:0, v56069:0, 3, 2, 4) :|: v55831:0 > 0 && v56065:0 > 1 f_2244(v56050:0, v56051:0, v56052:0, v56053:0, v56054:0, v56055:0, 1, v56066:0, 0, v56059:0, v56060:0, v56061:0, v56062:0, v56063:0, v59531:0, v56064:0, v56065:0, v56057:0, v56067:0, v56068:0, v56069:0, 3, 2, 4) -> f_2196(v56050:0, v56051:0, v56052:0, v56053:0, v56054:0, v56055:0, 1, v56066:0, 0, v56059:0, v56060:0, v56061:0, v56062:0, v56063:0, v59531:0, v56057:0, v56066:0, v56065:0, v56067:0, v56068:0, v56069:0, 3, 2, 4) :|: v59531:0 < 0 f_2244(v56050:0, v56051:0, v56052:0, v56053:0, v56054:0, v56055:0, 1, v56066:0, 0, v56059:0, v56060:0, v56061:0, v56062:0, v56063:0, v59531:0, v56064:0, v56065:0, v56057:0, v56067:0, v56068:0, v56069:0, 3, 2, 4) -> f_2196(v56050:0, v56051:0, v56052:0, v56053:0, v56054:0, v56055:0, 1, v56066:0, 0, v56059:0, v56060:0, v56061:0, v56062:0, v56063:0, v59531:0, v56057:0, v56066:0, v56065:0, v56067:0, v56068:0, v56069:0, 3, 2, 4) :|: v59531:0 > 0 f_2196(v55617:0, v55618:0, v55619:0, v55620:0, v55621:0, 1 + v55830:0, 1, v55624:0, 0, v55626:0, v55627:0, v55628:0, v55629:0, v55630:0, v55631:0, v55632:0, v55633:0, v55635:0, v55636:0, v55637:0, v55638:0, 3, 2, 4) -> f_2196(v55617:0, v55618:0, v55619:0, v55620:0, v55621:0, v55830:0, 1, v55834:0, 0, v55626:0, v55627:0, v55628:0, v55629:0, v55630:0, v59678:0, v55632:0, v55633:0, v55834:0, v55636:0, v55637:0, v55638:0, 3, 2, 4) :|: v55830:0 > 0 && v55630:0 > 2 && v59678:0 < 0 && v55834:0 > 0 f_2196(v55617:0, v55618:0, v55619:0, v55620:0, v55621:0, 1 + v55830:0, 1, v55624:0, 0, v55626:0, v55627:0, v55628:0, v55629:0, v55630:0, v55631:0, v55632:0, v55633:0, v55635:0, v55636:0, v55637:0, v55638:0, 3, 2, 4) -> f_2196(v55617:0, v55618:0, v55619:0, v55620:0, v55621:0, v55830:0, 1, v55834:0, 0, v55626:0, v55627:0, v55628:0, v55629:0, v55630:0, v59678:0, v55632:0, v55633:0, v55834:0, v55636:0, v55637:0, v55638:0, 3, 2, 4) :|: v55830:0 > 0 && v55630:0 > 2 && v59678:0 > 0 && v55834:0 > 0 Filtered unneeded arguments: f_2196(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22, x23, x24) -> f_2196(x6, x14) f_2244(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22, x23, x24) -> f_2244(x6, x8, x14, x15, x17) Removed division, modulo operations, cleaned up constraints. Obtained 5 rules.P rules: f_2196(sum~cons_1~v55830:0, v55630:0) -> f_2244(v55830:0, v55831:0, v55630:0, v59531:0, 1 + v55831:0) :|: v55831:0 > 0 && v55630:0 > 2 && v55830:0 > 0 && sum~cons_1~v55830:0 = 1 + v55830:0 f_2244(v56055:0, sum~cons_1~v55831:0, v56063:0, cons_0, v56065:0) -> f_2244(v56055:0, v55831:0, v56063:0, v59531:1, v56065:0) :|: v55831:0 > 0 && v56065:0 > 1 && sum~cons_1~v55831:0 = 1 + v55831:0 && cons_0 = 0 f_2244(v56055:0, v56066:0, v56063:0, v59531:0, v56065:0) -> f_2196(v56055:0, v56063:0) :|: v59531:0 < 0 f_2244(v56055:0, v56066:0, v56063:0, v59531:0, v56065:0) -> f_2196(v56055:0, v56063:0) :|: v59531:0 > 0 f_2196(sum~cons_1~v55830:0, v55630:0) -> f_2196(v55830:0, v55630:0) :|: v55830:0 > 0 && v55630:0 > 2 && sum~cons_1~v55830:0 = 1 + v55830:0 ---------------------------------------- (9) Obligation: Rules: f_2196(sum~cons_1~v55830:0, v55630:0) -> f_2244(v55830:0, v55831:0, v55630:0, v59531:0, 1 + v55831:0) :|: v55831:0 > 0 && v55630:0 > 2 && v55830:0 > 0 && sum~cons_1~v55830:0 = 1 + v55830:0 f_2244(x, x1, x2, x3, x4) -> f_2244(x, x5, x2, x6, x4) :|: x5 > 0 && x4 > 1 && x1 = 1 + x5 && x3 = 0 f_2244(x7, x8, x9, x10, x11) -> f_2196(x7, x9) :|: x10 < 0 f_2244(x12, x13, x14, x15, x16) -> f_2196(x12, x14) :|: x15 > 0 f_2196(x17, x18) -> f_2196(x19, x18) :|: x19 > 0 && x18 > 2 && x17 = 1 + x19 ---------------------------------------- (10) IRS2T2 (EQUIVALENT) Transformed input IRS into an integer transition system.Used the following mapping from defined symbols to location IDs: (f_2196_5,1) (f_2244_5,2) ---------------------------------------- (11) Obligation: START: 0; FROM: 0; TO: 1; FROM: 0; TO: 2; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := x4; oldX5 := oldX0 - 1; oldX6 := nondet(); oldX7 := nondet(); assume(oldX6 > 0 && oldX1 > 2 && oldX5 > 0 && oldX0 = 1 + oldX5); x0 := oldX0 - 1; x1 := oldX6; x2 := oldX1; x3 := oldX7; x4 := 1 + oldX6; TO: 2; FROM: 2; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := x4; oldX5 := oldX1 - 1; oldX6 := nondet(); assume(oldX5 > 0 && oldX4 > 1 && oldX1 = 1 + oldX5 && oldX3 = 0); x0 := oldX0; x1 := oldX1 - 1; x2 := oldX2; x3 := oldX6; x4 := oldX4; TO: 2; FROM: 2; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := x4; oldX5 := nondet(); oldX6 := nondet(); oldX7 := nondet(); assume(oldX3 < 0); x0 := oldX0; x1 := oldX2; x2 := oldX5; x3 := oldX6; x4 := oldX7; TO: 1; FROM: 2; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := x4; oldX5 := nondet(); oldX6 := nondet(); oldX7 := nondet(); assume(oldX3 > 0); x0 := oldX0; x1 := oldX2; x2 := oldX5; x3 := oldX6; x4 := oldX7; TO: 1; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := x4; oldX5 := oldX0 - 1; oldX6 := nondet(); oldX7 := nondet(); oldX8 := nondet(); assume(oldX5 > 0 && oldX1 > 2 && oldX0 = 1 + oldX5); x0 := oldX0 - 1; x1 := oldX1; x2 := oldX6; x3 := oldX7; x4 := oldX8; TO: 1; ---------------------------------------- (12) T2 (EQUIVALENT) Initially, performed program simplifications using lexicographic rank functions: * Removed transitions 2, 5, 6, 14, 17, 18, 19 using the following rank functions: - Rank function 1: RF for loc. 6: -1+2*x0 RF for loc. 7: 2*x0 RF for loc. 8: -2+2*x0 RF for loc. 12: 2*x0 Bound for (chained) transitions 6: 2 - Rank function 2: RF for loc. 6: -2+4*x0 RF for loc. 7: 4*x0 RF for loc. 8: -3+4*x0 RF for loc. 12: 4*x0 Bound for (chained) transitions 5: 5 - Rank function 3: RF for loc. 6: -1 RF for loc. 7: 0 RF for loc. 8: -2 RF for loc. 12: 0 Bound for (chained) transitions 2: -1 Bound for (chained) transitions 19: 0 - Rank function 4: RF for loc. 6: -1 RF for loc. 7: 0 RF for loc. 12: 0 Bound for (chained) transitions 18: 0 - Rank function 5: RF for loc. 7: 2*x1 RF for loc. 12: -1+2*x1 Bound for (chained) transitions 17: 3 - Rank function 6: RF for loc. 7: 0 RF for loc. 12: -1 Bound for (chained) transitions 14: 0 ---------------------------------------- (13) YES ---------------------------------------- (14) Obligation: SCC ---------------------------------------- (15) SCC2IRS (SOUND) Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: Generated rules. Obtained 25 rulesP rules: f_2069(v46044, v46045, v46046, v46047, v46048, v46049, 1, v46051, 0, v46053, v46054, v46055, v46056, v46057, v46058, v46059, v46060, v46061, v46062, v46063, 3, 2, 4) -> f_2072(v46044, v46045, v46046, v46047, v46048, v46049, 1, v46051, 0, v46053, v46054, v46055, v46056, v46057, v46058, v46059, v46060, v46061, v46062, v46063, 3, 2, 4) :|: TRUE f_2072(v46044, v46045, v46046, v46047, v46048, v46049, 1, v46051, 0, v46053, v46054, v46055, v46056, v46057, v46058, v46059, v46060, v46061, v46062, v46063, 3, 2, 4) -> f_2075(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46051, v46049, 0, v46053, v46054, v46055, v46056, v46057, v46058, v46060, v46061, v46062, v46063, 3, 2, 4) :|: 0 = 0 f_2075(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46051, v46049, 0, v46053, v46054, v46055, v46056, v46057, v46058, v46060, v46061, v46062, v46063, 3, 2, 4) -> f_2077(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46051, v46049, 0, v46053, v46054, v46055, v46056, v46057, v46058, v46060, v46061, v46062, v46063, 3, 2, 4) :|: v46059 != 0 && 2 <= v46049 && 2 <= v46057 f_2077(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46051, v46049, 0, v46053, v46054, v46055, v46056, v46057, v46058, v46060, v46061, v46062, v46063, 3, 2, 4) -> f_2080(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46051, v46049, 0, v46053, v46054, v46055, v46056, v46057, v46058, v46060, v46061, v46062, v46063, 3, 2, 4) :|: 0 = 0 f_2080(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46051, v46049, 0, v46053, v46054, v46055, v46056, v46057, v46058, v46060, v46061, v46062, v46063, 3, 2, 4) -> f_2083(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46051, v46049, 0, v46053, v46054, v46055, v46056, v46057, v46058, v46060, v46061, v46062, v46063, 3, 2, 4) :|: TRUE f_2083(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46051, v46049, 0, v46053, v46054, v46055, v46056, v46057, v46058, v46060, v46061, v46062, v46063, 3, 2, 4) -> f_2086(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46060, v46049, 0, v46053, v46054, v46055, v46056, v46057, v46058, v46061, v46062, v46063, 3, 2, 4) :|: 0 = 0 f_2086(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46060, v46049, 0, v46053, v46054, v46055, v46056, v46057, v46058, v46061, v46062, v46063, 3, 2, 4) -> f_2090(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46060, v46049, 0, v46053, v46054, v46055, v46056, v46057, v46058, v46061, v46062, v46063, 3, 2, 4) :|: 0 < v46060 f_2090(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46060, v46049, 0, v46053, v46054, v46055, v46056, v46057, v46058, v46061, v46062, v46063, 3, 2, 4) -> f_2094(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46060, v46049, 0, v46053, v46054, v46055, v46056, v46057, v46058, v46061, v46062, v46063, 3, 2, 4) :|: 0 = 0 f_2094(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46060, v46049, 0, v46053, v46054, v46055, v46056, v46057, v46058, v46061, v46062, v46063, 3, 2, 4) -> f_2098(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46060, v46049, 0, v46053, v46054, v46055, v46056, v46057, v46058, v46061, v46062, v46063, 3, 2, 4) :|: 0 = 0 f_2098(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46060, v46049, 0, v46053, v46054, v46055, v46056, v46057, v46058, v46061, v46062, v46063, 3, 2, 4) -> f_2102(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46060, v46049, 0, v46053, v46054, v46055, v46056, v46057, v46058, v46061, v46062, v46063, 3, 2, 4) :|: TRUE f_2102(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46060, v46049, 0, v46053, v46054, v46055, v46056, v46057, v46058, v46061, v46062, v46063, 3, 2, 4) -> f_2106(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46060, 0, v46053, v46054, v46055, v46056, v46057, v46058, v46049, v46061, v46062, v46063, 3, 2, 4) :|: 0 = 0 f_2106(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46060, 0, v46053, v46054, v46055, v46056, v46057, v46058, v46049, v46061, v46062, v46063, 3, 2, 4) -> f_2109(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46060, 0, v46053, v46054, v46055, v46056, v46057, v46058, v46049, v46061, v46062, v46063, 3, 2, 4) :|: 0 = 0 f_2109(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46060, 0, v46053, v46054, v46055, v46056, v46057, v46058, v46049, v46061, v46062, v46063, 3, 2, 4) -> f_2112(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46060, 0, v46053, v46054, v46055, v46056, v46057, v46058, v46049, v46061, v46062, v46063, 3, 2, 4) :|: TRUE f_2112(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46060, 0, v46053, v46054, v46055, v46056, v46057, v46058, v46049, v46061, v46062, v46063, 3, 2, 4) -> f_2114(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46060, 0, v46053, v46054, v46055, v46056, v46057, v48920, v46049, v46061, v46062, v46063, 3, 2, 4) :|: TRUE f_2114(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46060, 0, v46053, v46054, v46055, v46056, v46057, v48920, v46049, v46061, v46062, v46063, 3, 2, 4) -> f_2116(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46060, 0, v46053, v46054, v46055, v46056, v46057, v48920, v46049, v46061, v46062, v46063, 3, 2, 4) :|: v48920 != 0 f_2116(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46060, 0, v46053, v46054, v46055, v46056, v46057, v48920, v46049, v46061, v46062, v46063, 3, 2, 4) -> f_2119(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46060, 0, v46053, v46054, v46055, v46056, v46057, v48920, v46049, v46061, v46062, v46063, 3, 2, 4) :|: 0 = 0 f_2119(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46060, 0, v46053, v46054, v46055, v46056, v46057, v48920, v46049, v46061, v46062, v46063, 3, 2, 4) -> f_2122(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46060, 0, v46053, v46054, v46055, v46056, v46057, v48920, v46049, v46061, v46062, v46063, 3, 2, 4) :|: TRUE f_2122(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46060, 0, v46053, v46054, v46055, v46056, v46057, v48920, v46049, v46061, v46062, v46063, 3, 2, 4) -> f_2125(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46060, 0, v46053, v46054, v46055, v46056, v46057, v48920, v46061, v46062, v46063, 3, 2, 4) :|: 0 = 0 f_2125(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46060, 0, v46053, v46054, v46055, v46056, v46057, v48920, v46061, v46062, v46063, 3, 2, 4) -> f_2129(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46060, 0, v46053, v46054, v46055, v46056, v46057, v48920, v49790, v46061, v46062, v46063, 3, 2, 4) :|: 1 + v49790 = v46059 && 0 <= v49790 f_2129(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46060, 0, v46053, v46054, v46055, v46056, v46057, v48920, v49790, v46061, v46062, v46063, 3, 2, 4) -> f_2133(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46060, 0, v46053, v46054, v46055, v46056, v46057, v48920, v49790, v46061, v46062, v46063, 3, 2, 4) :|: TRUE f_2133(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46060, 0, v46053, v46054, v46055, v46056, v46057, v48920, v49790, v46061, v46062, v46063, 3, 2, 4) -> f_2137(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46060, 0, v46053, v46054, v46055, v46056, v46057, v48920, v49790, v50389, v46061, v46062, v46063, 3, 2, 4) :|: TRUE f_2137(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46060, 0, v46053, v46054, v46055, v46056, v46057, v48920, v49790, v50389, v46061, v46062, v46063, 3, 2, 4) -> f_2141(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46060, 0, v46053, v46054, v46055, v46056, v46057, v48920, v49790, v50389, v46061, v46062, v46063, 3, 2, 4) :|: TRUE f_2141(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46060, 0, v46053, v46054, v46055, v46056, v46057, v48920, v49790, v50389, v46061, v46062, v46063, 3, 2, 4) -> f_2145(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46060, 0, v46053, v46054, v46055, v46056, v46057, v48920, v49790, v50389, v46061, v46062, v46063, 3, 2, 4) :|: TRUE f_2145(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46060, 0, v46053, v46054, v46055, v46056, v46057, v48920, v49790, v50389, v46061, v46062, v46063, 3, 2, 4) -> f_2066(v46044, v46045, v46046, v46047, v46048, v46059, 1, v46060, 0, v46053, v46054, v46055, v46056, v46057, v48920, v49790, v50389, v46061, v46062, v46063, 3, 2, 4) :|: TRUE f_2066(v46044, v46045, v46046, v46047, v46048, v46049, 1, v46051, 0, v46053, v46054, v46055, v46056, v46057, v46058, v46059, v46060, v46061, v46062, v46063, 3, 2, 4) -> f_2069(v46044, v46045, v46046, v46047, v46048, v46049, 1, v46051, 0, v46053, v46054, v46055, v46056, v46057, v46058, v46059, v46060, v46061, v46062, v46063, 3, 2, 4) :|: TRUE Combined rules. Obtained 2 rulesP rules: f_2069(v46044:0, v46045:0, v46046:0, v46047:0, v46048:0, v46049:0, 1, v46051:0, 0, v46053:0, v46054:0, v46055:0, v46056:0, v46057:0, v46058:0, 1 + v49790:0, v46060:0, v46061:0, v46062:0, v46063:0, 3, 2, 4) -> f_2069(v46044:0, v46045:0, v46046:0, v46047:0, v46048:0, 1 + v49790:0, 1, v46060:0, 0, v46053:0, v46054:0, v46055:0, v46056:0, v46057:0, v48920:0, v49790:0, v50389:0, v46061:0, v46062:0, v46063:0, 3, 2, 4) :|: v46049:0 > 1 && v49790:0 > -1 && v46057:0 > 1 && v46060:0 > 0 && v48920:0 < 0 f_2069(v46044:0, v46045:0, v46046:0, v46047:0, v46048:0, v46049:0, 1, v46051:0, 0, v46053:0, v46054:0, v46055:0, v46056:0, v46057:0, v46058:0, 1 + v49790:0, v46060:0, v46061:0, v46062:0, v46063:0, 3, 2, 4) -> f_2069(v46044:0, v46045:0, v46046:0, v46047:0, v46048:0, 1 + v49790:0, 1, v46060:0, 0, v46053:0, v46054:0, v46055:0, v46056:0, v46057:0, v48920:0, v49790:0, v50389:0, v46061:0, v46062:0, v46063:0, 3, 2, 4) :|: v46049:0 > 1 && v49790:0 > -1 && v46057:0 > 1 && v46060:0 > 0 && v48920:0 > 0 Filtered unneeded arguments: f_2069(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22, x23) -> f_2069(x6, x14, x16, x17) Removed division, modulo operations, cleaned up constraints. Obtained 1 rules.P rules: f_2069(v46049:0, v46057:0, sum~cons_1~v49790:0, v46060:0) -> f_2069(1 + v49790:0, v46057:0, v49790:0, v50389:0) :|: v49790:0 > -1 && v46049:0 > 1 && v46060:0 > 0 && v46057:0 > 1 && sum~cons_1~v49790:0 = 1 + v49790:0 ---------------------------------------- (16) Obligation: Rules: f_2069(v46049:0, v46057:0, sum~cons_1~v49790:0, v46060:0) -> f_2069(1 + v49790:0, v46057:0, v49790:0, v50389:0) :|: v49790:0 > -1 && v46049:0 > 1 && v46060:0 > 0 && v46057:0 > 1 && sum~cons_1~v49790:0 = 1 + v49790:0 ---------------------------------------- (17) IRS2T2 (EQUIVALENT) Transformed input IRS into an integer transition system.Used the following mapping from defined symbols to location IDs: (f_2069_4,1) ---------------------------------------- (18) Obligation: START: 0; FROM: 0; TO: 1; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := oldX2 - 1; oldX5 := nondet(); assume(oldX4 > -1 && oldX0 > 1 && oldX3 > 0 && oldX1 > 1 && oldX2 = 1 + oldX4); x0 := 1 + oldX4; x1 := oldX1; x2 := oldX2 - 1; x3 := oldX5; TO: 1; ---------------------------------------- (19) T2 (EQUIVALENT) Initially, performed program simplifications using lexicographic rank functions: * Removed transitions 1, 3, 4 using the following rank functions: - Rank function 1: RF for loc. 5: 1+2*x2 RF for loc. 6: 2*x2 Bound for (chained) transitions 3: 2 Bound for (chained) transitions 4: 2 - Rank function 2: RF for loc. 5: 0 RF for loc. 6: -1 Bound for (chained) transitions 1: 0 ---------------------------------------- (20) YES ---------------------------------------- (21) Obligation: SCC ---------------------------------------- (22) SCC2IRS (SOUND) Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: Generated rules. Obtained 22 rulesP rules: f_2042(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44381, 0, v44383, v44384, v44385, v44386, v44387, v44388, v44389, v44390, 3, 2, 4) -> f_2046(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44381, 0, v44383, v44384, v44385, v44386, v44387, v44388, v44389, v44390, 3, 2, 4) :|: TRUE f_2046(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44381, 0, v44383, v44384, v44385, v44386, v44387, v44388, v44389, v44390, 3, 2, 4) -> f_2050(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44381, 0, v44383, v44384, v44385, v44386, v44387, v44388, v44389, v44390, 3, 2, 4) :|: 0 = 0 f_2050(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44381, 0, v44383, v44384, v44385, v44386, v44387, v44388, v44389, v44390, 3, 2, 4) -> f_2054(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44381, 0, v44383, v44384, v44385, v44386, v44387, v44388, v44389, v44390, 3, 2, 4) :|: 0 = 0 f_2054(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44381, 0, v44383, v44384, v44385, v44386, v44387, v44388, v44389, v44390, 3, 2, 4) -> f_2057(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44381, 0, v44383, v44384, v44385, v44386, v44387, v44388, v44389, v44390, 3, 2, 4) :|: TRUE f_2057(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44381, 0, v44383, v44384, v44385, v44386, v44387, v44388, v44389, v44390, 3, 2, 4) -> f_2060(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44387, 0, v44383, v44384, v44385, v44386, v44381, v44388, v44389, v44390, 3, 2, 4) :|: 0 = 0 f_2060(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44387, 0, v44383, v44384, v44385, v44386, v44381, v44388, v44389, v44390, 3, 2, 4) -> f_2063(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44387, 0, v44383, v44384, v44385, v44386, v44381, v44388, v44389, v44390, 3, 2, 4) :|: 0 < v44387 && 2 <= v44381 && 2 <= v44386 && 3 <= v44385 && 3 <= v44378 f_2063(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44387, 0, v44383, v44384, v44385, v44386, v44381, v44388, v44389, v44390, 3, 2, 4) -> f_2067(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44387, 0, v44383, v44384, v44385, v44386, v44381, v44388, v44389, v44390, 3, 2, 4) :|: 0 = 0 f_2067(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44387, 0, v44383, v44384, v44385, v44386, v44381, v44388, v44389, v44390, 3, 2, 4) -> f_2070(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44387, 0, v44383, v44384, v44385, v44386, v44381, v44388, v44389, v44390, 3, 2, 4) :|: 0 = 0 f_2070(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44387, 0, v44383, v44384, v44385, v44386, v44381, v44388, v44389, v44390, 3, 2, 4) -> f_2073(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44387, 0, v44383, v44384, v44385, v44386, v44381, v44388, v44389, v44390, 3, 2, 4) :|: TRUE f_2073(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44387, 0, v44383, v44384, v44385, v44386, v44381, v44388, v44389, v44390, 3, 2, 4) -> f_2076(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44387, 0, v44383, v44384, v44385, v44386, v44381, v44388, v44389, v44390, 3, 2, 4) :|: 0 = 0 f_2076(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44387, 0, v44383, v44384, v44385, v44386, v44381, v44388, v44389, v44390, 3, 2, 4) -> f_2079(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44387, 0, v44383, v44384, v44385, v44386, v44381, v44388, v44389, v44390, 3, 2, 4) :|: 0 = 0 f_2079(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44387, 0, v44383, v44384, v44385, v44386, v44381, v44388, v44389, v44390, 3, 2, 4) -> f_2082(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44387, 0, v44383, v44384, v44385, v44386, v44381, v44388, v44389, v44390, 3, 2, 4) :|: TRUE f_2082(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44387, 0, v44383, v44384, v44385, v44386, v44381, v44388, v44389, v44390, 3, 2, 4) -> f_2085(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44387, 0, v44383, v44384, v44385, v44386, v47531, v44381, v44388, v44389, v44390, 3, 2, 4) :|: TRUE f_2085(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44387, 0, v44383, v44384, v44385, v44386, v47531, v44381, v44388, v44389, v44390, 3, 2, 4) -> f_2089(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44387, 0, v44383, v44384, v44385, v44386, v44381, v44388, v44389, v44390, 3, 2, 4) :|: v47531 = 0 f_2089(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44387, 0, v44383, v44384, v44385, v44386, v44381, v44388, v44389, v44390, 3, 2, 4) -> f_2093(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44387, 0, v44383, v44384, v44385, v44386, v44381, v44388, v44389, v44390, 3, 2, 4) :|: 0 = 0 f_2093(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44387, 0, v44383, v44384, v44385, v44386, v44381, v44388, v44389, v44390, 3, 2, 4) -> f_2097(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44387, 0, v44383, v44384, v44385, v44386, v44381, v44388, v44389, v44390, 3, 2, 4) :|: TRUE f_2097(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44387, 0, v44383, v44384, v44385, v44386, v44381, v44388, v44389, v44390, 3, 2, 4) -> f_2101(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44387, 0, v44383, v44384, v44385, v44386, v44388, v44389, v44390, 3, 2, 4) :|: 0 = 0 f_2101(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44387, 0, v44383, v44384, v44385, v44386, v44388, v44389, v44390, 3, 2, 4) -> f_2105(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44387, 0, v44383, v44384, v44385, v44386, v48615, v44388, v44389, v44390, 3, 2, 4) :|: 1 + v48615 = v44387 && 0 <= v48615 f_2105(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44387, 0, v44383, v44384, v44385, v44386, v48615, v44388, v44389, v44390, 3, 2, 4) -> f_2108(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44387, 0, v44383, v44384, v44385, v44386, v48615, v44388, v44389, v44390, 3, 2, 4) :|: TRUE f_2108(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44387, 0, v44383, v44384, v44385, v44386, v48615, v44388, v44389, v44390, 3, 2, 4) -> f_2111(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44387, 0, v44383, v44384, v44385, v44386, v48615, v44388, v44389, v44390, 3, 2, 4) :|: TRUE f_2111(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44387, 0, v44383, v44384, v44385, v44386, v48615, v44388, v44389, v44390, 3, 2, 4) -> f_2038(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44387, 0, v44383, v44384, v44385, v44386, v48615, v44388, v44389, v44390, 3, 2, 4) :|: TRUE f_2038(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44381, 0, v44383, v44384, v44385, v44386, v44387, v44388, v44389, v44390, 3, 2, 4) -> f_2042(v44374, v44375, v44376, v44377, v44378, v44379, 1, v44381, 0, v44383, v44384, v44385, v44386, v44387, v44388, v44389, v44390, 3, 2, 4) :|: TRUE Combined rules. Obtained 1 rulesP rules: f_2042(v44374:0, v44375:0, v44376:0, v44377:0, v44378:0, v44379:0, 1, v44381:0, 0, v44383:0, v44384:0, v44385:0, v44386:0, 1 + v48615:0, v44388:0, v44389:0, v44390:0, 3, 2, 4) -> f_2042(v44374:0, v44375:0, v44376:0, v44377:0, v44378:0, v44379:0, 1, 1 + v48615:0, 0, v44383:0, v44384:0, v44385:0, v44386:0, v48615:0, v44388:0, v44389:0, v44390:0, 3, 2, 4) :|: v44381:0 > 1 && v48615:0 > -1 && v44386:0 > 1 && v44385:0 > 2 && v44378:0 > 2 Filtered unneeded arguments: f_2042(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20) -> f_2042(x5, x8, x12, x13, x14) Removed division, modulo operations, cleaned up constraints. Obtained 1 rules.P rules: f_2042(v44378:0, v44381:0, v44385:0, v44386:0, sum~cons_1~v48615:0) -> f_2042(v44378:0, 1 + v48615:0, v44385:0, v44386:0, v48615:0) :|: v48615:0 > -1 && v44381:0 > 1 && v44386:0 > 1 && v44378:0 > 2 && v44385:0 > 2 && sum~cons_1~v48615:0 = 1 + v48615:0 ---------------------------------------- (23) Obligation: Rules: f_2042(v44378:0, v44381:0, v44385:0, v44386:0, sum~cons_1~v48615:0) -> f_2042(v44378:0, 1 + v48615:0, v44385:0, v44386:0, v48615:0) :|: v48615:0 > -1 && v44381:0 > 1 && v44386:0 > 1 && v44378:0 > 2 && v44385:0 > 2 && sum~cons_1~v48615:0 = 1 + v48615:0 ---------------------------------------- (24) IRS2T2 (EQUIVALENT) Transformed input IRS into an integer transition system.Used the following mapping from defined symbols to location IDs: (f_2042_5,1) ---------------------------------------- (25) Obligation: START: 0; FROM: 0; TO: 1; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := x4; oldX5 := oldX4 - 1; assume(oldX5 > -1 && oldX1 > 1 && oldX3 > 1 && oldX0 > 2 && oldX2 > 2 && oldX4 = 1 + oldX5); x0 := oldX0; x1 := 1 + oldX5; x2 := oldX2; x3 := oldX3; x4 := oldX4 - 1; TO: 1; ---------------------------------------- (26) T2 (EQUIVALENT) Initially, performed program simplifications using lexicographic rank functions: * Removed transitions 1, 3, 4 using the following rank functions: - Rank function 1: RF for loc. 5: 1+2*x4 RF for loc. 6: 2*x4 Bound for (chained) transitions 3: 2 Bound for (chained) transitions 4: 2 - Rank function 2: RF for loc. 5: 0 RF for loc. 6: -1 Bound for (chained) transitions 1: 0 ---------------------------------------- (27) YES ---------------------------------------- (28) Obligation: SCC ---------------------------------------- (29) SCC2IRS (SOUND) Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: Generated rules. Obtained 22 rulesP rules: f_1909(v37319, v37320, v37321, v37322, v37323, 1, v37325, v37326, v37327, v37328, v37329, 0, v37331, v37332, v37333, v37334, 3, 2, 4) -> f_1917(v37319, v37320, v37321, v37322, v37323, 1, v37325, v37326, v37327, v37328, v37329, 0, v37331, v37332, v37333, v37334, 3, 2, 4) :|: TRUE f_1917(v37319, v37320, v37321, v37322, v37323, 1, v37325, v37326, v37327, v37328, v37329, 0, v37331, v37332, v37333, v37334, 3, 2, 4) -> f_1924(v37319, v37320, v37321, v37322, v37323, 1, v37325, v37326, v37327, v37328, v37329, 0, v37331, v37332, v37333, v37334, 3, 2, 4) :|: 0 = 0 f_1924(v37319, v37320, v37321, v37322, v37323, 1, v37325, v37326, v37327, v37328, v37329, 0, v37331, v37332, v37333, v37334, 3, 2, 4) -> f_1931(v37319, v37320, v37321, v37322, v37323, 1, v37325, v37326, v37327, v37328, v37329, 0, v37331, v37332, v37333, v37334, 3, 2, 4) :|: 0 = 0 f_1931(v37319, v37320, v37321, v37322, v37323, 1, v37325, v37326, v37327, v37328, v37329, 0, v37331, v37332, v37333, v37334, 3, 2, 4) -> f_1939(v37319, v37320, v37321, v37322, v37323, 1, v37325, v37326, v37327, v37328, v37329, 0, v37331, v37332, v37333, v37334, 3, 2, 4) :|: TRUE f_1939(v37319, v37320, v37321, v37322, v37323, 1, v37325, v37326, v37327, v37328, v37329, 0, v37331, v37332, v37333, v37334, 3, 2, 4) -> f_1943(v37319, v37320, v37321, v37322, v37323, 1, v37331, v37326, v37327, v37328, v37329, 0, v37325, v37332, v37333, v37334, 3, 2, 4) :|: 0 = 0 f_1943(v37319, v37320, v37321, v37322, v37323, 1, v37331, v37326, v37327, v37328, v37329, 0, v37325, v37332, v37333, v37334, 3, 2, 4) -> f_1947(v37319, v37320, v37321, v37322, v37323, 1, v37331, v37326, v37327, v37328, v37329, 0, v37325, v37332, v37333, v37334, 3, 2, 4) :|: 0 < v37331 && 2 <= v37325 && 2 <= v37328 && 3 <= v37327 && 3 <= v37323 f_1947(v37319, v37320, v37321, v37322, v37323, 1, v37331, v37326, v37327, v37328, v37329, 0, v37325, v37332, v37333, v37334, 3, 2, 4) -> f_1952(v37319, v37320, v37321, v37322, v37323, 1, v37331, v37326, v37327, v37328, v37329, 0, v37325, v37332, v37333, v37334, 3, 2, 4) :|: 0 = 0 f_1952(v37319, v37320, v37321, v37322, v37323, 1, v37331, v37326, v37327, v37328, v37329, 0, v37325, v37332, v37333, v37334, 3, 2, 4) -> f_1957(v37319, v37320, v37321, v37322, v37323, 1, v37331, v37326, v37327, v37328, v37329, 0, v37325, v37332, v37333, v37334, 3, 2, 4) :|: 0 = 0 f_1957(v37319, v37320, v37321, v37322, v37323, 1, v37331, v37326, v37327, v37328, v37329, 0, v37325, v37332, v37333, v37334, 3, 2, 4) -> f_1962(v37319, v37320, v37321, v37322, v37323, 1, v37331, v37326, v37327, v37328, v37329, 0, v37325, v37332, v37333, v37334, 3, 2, 4) :|: TRUE f_1962(v37319, v37320, v37321, v37322, v37323, 1, v37331, v37326, v37327, v37328, v37329, 0, v37325, v37332, v37333, v37334, 3, 2, 4) -> f_1966(v37319, v37320, v37321, v37322, v37323, 1, v37331, v37326, v37327, v37328, v37329, 0, v37325, v37332, v37333, v37334, 3, 2, 4) :|: 0 = 0 f_1966(v37319, v37320, v37321, v37322, v37323, 1, v37331, v37326, v37327, v37328, v37329, 0, v37325, v37332, v37333, v37334, 3, 2, 4) -> f_1970(v37319, v37320, v37321, v37322, v37323, 1, v37331, v37326, v37327, v37328, v37329, 0, v37325, v37332, v37333, v37334, 3, 2, 4) :|: 0 = 0 f_1970(v37319, v37320, v37321, v37322, v37323, 1, v37331, v37326, v37327, v37328, v37329, 0, v37325, v37332, v37333, v37334, 3, 2, 4) -> f_1974(v37319, v37320, v37321, v37322, v37323, 1, v37331, v37326, v37327, v37328, v37329, 0, v37325, v37332, v37333, v37334, 3, 2, 4) :|: TRUE f_1974(v37319, v37320, v37321, v37322, v37323, 1, v37331, v37326, v37327, v37328, v37329, 0, v37325, v37332, v37333, v37334, 3, 2, 4) -> f_1979(v37319, v37320, v37321, v37322, v37323, 1, v37331, v37326, v37327, v37328, v37329, 0, v41431, v37325, v37332, v37333, v37334, 3, 2, 4) :|: TRUE f_1979(v37319, v37320, v37321, v37322, v37323, 1, v37331, v37326, v37327, v37328, v37329, 0, v41431, v37325, v37332, v37333, v37334, 3, 2, 4) -> f_1985(v37319, v37320, v37321, v37322, v37323, 1, v37331, v37326, v37327, v37328, v37329, 0, v37325, v37332, v37333, v37334, 3, 2, 4) :|: v41431 = 0 f_1985(v37319, v37320, v37321, v37322, v37323, 1, v37331, v37326, v37327, v37328, v37329, 0, v37325, v37332, v37333, v37334, 3, 2, 4) -> f_1990(v37319, v37320, v37321, v37322, v37323, 1, v37331, v37326, v37327, v37328, v37329, 0, v37325, v37332, v37333, v37334, 3, 2, 4) :|: 0 = 0 f_1990(v37319, v37320, v37321, v37322, v37323, 1, v37331, v37326, v37327, v37328, v37329, 0, v37325, v37332, v37333, v37334, 3, 2, 4) -> f_1995(v37319, v37320, v37321, v37322, v37323, 1, v37331, v37326, v37327, v37328, v37329, 0, v37325, v37332, v37333, v37334, 3, 2, 4) :|: TRUE f_1995(v37319, v37320, v37321, v37322, v37323, 1, v37331, v37326, v37327, v37328, v37329, 0, v37325, v37332, v37333, v37334, 3, 2, 4) -> f_2000(v37319, v37320, v37321, v37322, v37323, 1, v37331, v37326, v37327, v37328, v37329, 0, v37332, v37333, v37334, 3, 2, 4) :|: 0 = 0 f_2000(v37319, v37320, v37321, v37322, v37323, 1, v37331, v37326, v37327, v37328, v37329, 0, v37332, v37333, v37334, 3, 2, 4) -> f_2005(v37319, v37320, v37321, v37322, v37323, 1, v37331, v37326, v37327, v37328, v37329, 0, v42430, v37332, v37333, v37334, 3, 2, 4) :|: 1 + v42430 = v37331 && 0 <= v42430 f_2005(v37319, v37320, v37321, v37322, v37323, 1, v37331, v37326, v37327, v37328, v37329, 0, v42430, v37332, v37333, v37334, 3, 2, 4) -> f_2011(v37319, v37320, v37321, v37322, v37323, 1, v37331, v37326, v37327, v37328, v37329, 0, v42430, v37332, v37333, v37334, 3, 2, 4) :|: TRUE f_2011(v37319, v37320, v37321, v37322, v37323, 1, v37331, v37326, v37327, v37328, v37329, 0, v42430, v37332, v37333, v37334, 3, 2, 4) -> f_2017(v37319, v37320, v37321, v37322, v37323, 1, v37331, v37326, v37327, v37328, v37329, 0, v42430, v37332, v37333, v37334, 3, 2, 4) :|: TRUE f_2017(v37319, v37320, v37321, v37322, v37323, 1, v37331, v37326, v37327, v37328, v37329, 0, v42430, v37332, v37333, v37334, 3, 2, 4) -> f_1902(v37319, v37320, v37321, v37322, v37323, 1, v37331, v37326, v37327, v37328, v37329, 0, v42430, v37332, v37333, v37334, 3, 2, 4) :|: TRUE f_1902(v37319, v37320, v37321, v37322, v37323, 1, v37325, v37326, v37327, v37328, v37329, 0, v37331, v37332, v37333, v37334, 3, 2, 4) -> f_1909(v37319, v37320, v37321, v37322, v37323, 1, v37325, v37326, v37327, v37328, v37329, 0, v37331, v37332, v37333, v37334, 3, 2, 4) :|: TRUE Combined rules. Obtained 1 rulesP rules: f_1909(v37319:0, v37320:0, v37321:0, v37322:0, v37323:0, 1, v37325:0, v37326:0, v37327:0, v37328:0, v37329:0, 0, 1 + v42430:0, v37332:0, v37333:0, v37334:0, 3, 2, 4) -> f_1909(v37319:0, v37320:0, v37321:0, v37322:0, v37323:0, 1, 1 + v42430:0, v37326:0, v37327:0, v37328:0, v37329:0, 0, v42430:0, v37332:0, v37333:0, v37334:0, 3, 2, 4) :|: v37325:0 > 1 && v42430:0 > -1 && v37328:0 > 1 && v37327:0 > 2 && v37323:0 > 2 Filtered unneeded arguments: f_1909(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19) -> f_1909(x5, x7, x9, x10, x13) Removed division, modulo operations, cleaned up constraints. Obtained 1 rules.P rules: f_1909(v37323:0, v37325:0, v37327:0, v37328:0, sum~cons_1~v42430:0) -> f_1909(v37323:0, 1 + v42430:0, v37327:0, v37328:0, v42430:0) :|: v42430:0 > -1 && v37325:0 > 1 && v37328:0 > 1 && v37323:0 > 2 && v37327:0 > 2 && sum~cons_1~v42430:0 = 1 + v42430:0 ---------------------------------------- (30) Obligation: Rules: f_1909(v37323:0, v37325:0, v37327:0, v37328:0, sum~cons_1~v42430:0) -> f_1909(v37323:0, 1 + v42430:0, v37327:0, v37328:0, v42430:0) :|: v42430:0 > -1 && v37325:0 > 1 && v37328:0 > 1 && v37323:0 > 2 && v37327:0 > 2 && sum~cons_1~v42430:0 = 1 + v42430:0 ---------------------------------------- (31) IRS2T2 (EQUIVALENT) Transformed input IRS into an integer transition system.Used the following mapping from defined symbols to location IDs: (f_1909_5,1) ---------------------------------------- (32) Obligation: START: 0; FROM: 0; TO: 1; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := x4; oldX5 := oldX4 - 1; assume(oldX5 > -1 && oldX1 > 1 && oldX3 > 1 && oldX0 > 2 && oldX2 > 2 && oldX4 = 1 + oldX5); x0 := oldX0; x1 := 1 + oldX5; x2 := oldX2; x3 := oldX3; x4 := oldX4 - 1; TO: 1; ---------------------------------------- (33) T2 (EQUIVALENT) Initially, performed program simplifications using lexicographic rank functions: * Removed transitions 1, 3, 4 using the following rank functions: - Rank function 1: RF for loc. 5: 1+2*x4 RF for loc. 6: 2*x4 Bound for (chained) transitions 3: 2 Bound for (chained) transitions 4: 2 - Rank function 2: RF for loc. 5: 0 RF for loc. 6: -1 Bound for (chained) transitions 1: 0 ---------------------------------------- (34) YES ---------------------------------------- (35) Obligation: SCC ---------------------------------------- (36) SCC2IRS (SOUND) Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: Generated rules. Obtained 56 rulesP rules: f_1764(v29304, v29305, v29306, v29307, v29308, v29309, 1, v29311, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29320, v29321, v29322, v29323, 3, 2, 4) -> f_1771(v29304, v29305, v29306, v29307, v29308, v29309, 1, v29311, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29568, v29320, v29321, v29322, v29323, 3, 2, 4) :|: 1 + v29568 = v29309 && 0 <= v29568 f_1771(v29304, v29305, v29306, v29307, v29308, v29309, 1, v29311, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29568, v29320, v29321, v29322, v29323, 3, 2, 4) -> f_1778(v29304, v29305, v29306, v29307, v29308, v29309, 1, v29311, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29568, v29320, v29321, v29322, v29323, 3, 2, 4) :|: TRUE f_1778(v29304, v29305, v29306, v29307, v29308, v29309, 1, v29311, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29568, v29320, v29321, v29322, v29323, 3, 2, 4) -> f_1784(v29304, v29305, v29306, v29307, v29308, v29309, 1, v29311, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29568, v29953, v29321, v29322, v29323, 3, 2, 4) :|: TRUE f_1784(v29304, v29305, v29306, v29307, v29308, v29309, 1, v29311, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29568, v29953, v29321, v29322, v29323, 3, 2, 4) -> f_1791(v29304, v29305, v29306, v29307, v29308, v29309, 1, v29311, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29568, v29953, v29321, v29322, v29323, 3, 2, 4) :|: TRUE f_1791(v29304, v29305, v29306, v29307, v29308, v29309, 1, v29311, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29568, v29953, v29321, v29322, v29323, 3, 2, 4) -> f_1797(v29304, v29305, v29306, v29307, v29308, v29309, 1, v29311, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29568, v29953, v29321, v29322, v29323, 3, 2, 4) :|: TRUE f_1797(v29304, v29305, v29306, v29307, v29308, v29309, 1, v29311, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29568, v29953, v29321, v29322, v29323, 3, 2, 4) -> f_1803(v29304, v29305, v29306, v29307, v29308, v29309, 1, v29311, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29568, v29953, v29321, v29322, v29323, 3, 2, 4) :|: TRUE f_1803(v29304, v29305, v29306, v29307, v29308, v29309, 1, v29311, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29568, v29953, v29321, v29322, v29323, 3, 2, 4) -> f_1809(v29304, v29305, v29306, v29307, v29308, v29309, 1, v29311, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29568, v29953, v29321, v29322, v29323, 3, 2, 4) :|: TRUE f_1809(v29304, v29305, v29306, v29307, v29308, v29309, 1, v29311, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29568, v29953, v29321, v29322, v29323, 3, 2, 4) -> f_1816(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29311, v29309, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29953, v29321, v29322, v29323, 3, 2, 4) :|: 0 = 0 f_1816(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29311, v29309, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29953, v29321, v29322, v29323, 3, 2, 4) -> f_1823(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29311, v29309, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29953, v29321, v29322, v29323, 3, 2, 4) :|: v29568 != 0 && 2 <= v29309 && 3 <= v29315 f_1823(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29311, v29309, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29953, v29321, v29322, v29323, 3, 2, 4) -> f_1831(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29311, v29309, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29953, v29321, v29322, v29323, 3, 2, 4) :|: 0 = 0 f_1831(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29311, v29309, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29953, v29321, v29322, v29323, 3, 2, 4) -> f_1840(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29311, v29309, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29953, v29321, v29322, v29323, 3, 2, 4) :|: TRUE f_1840(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29311, v29309, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29953, v29321, v29322, v29323, 3, 2, 4) -> f_1849(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29953, v29309, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29321, v29322, v29323, 3, 2, 4) :|: 0 = 0 f_1849(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29953, v29309, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29321, v29322, v29323, 3, 2, 4) -> f_1858(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29953, v29309, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29321, v29322, v29323, 3, 2, 4) :|: 0 < v29953 f_1858(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29953, v29309, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29321, v29322, v29323, 3, 2, 4) -> f_1867(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29953, v29309, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29321, v29322, v29323, 3, 2, 4) :|: 0 = 0 f_1867(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29953, v29309, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29321, v29322, v29323, 3, 2, 4) -> f_1875(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29953, v29309, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29321, v29322, v29323, 3, 2, 4) :|: 0 = 0 f_1875(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29953, v29309, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29321, v29322, v29323, 3, 2, 4) -> f_1882(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29953, v29309, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29321, v29322, v29323, 3, 2, 4) :|: TRUE f_1882(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29953, v29309, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29321, v29322, v29323, 3, 2, 4) -> f_1890(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29953, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29309, v29321, v29322, v29323, 3, 2, 4) :|: 0 = 0 f_1890(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29953, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29309, v29321, v29322, v29323, 3, 2, 4) -> f_1897(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29953, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29309, v29321, v29322, v29323, 3, 2, 4) :|: 0 = 0 f_1897(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29953, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29309, v29321, v29322, v29323, 3, 2, 4) -> f_1906(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29953, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29309, v29321, v29322, v29323, 3, 2, 4) :|: TRUE f_1906(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29953, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29309, v29321, v29322, v29323, 3, 2, 4) -> f_1914(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29953, 0, v29313, v29314, v29315, v37794, v29317, v29318, v29309, v29321, v29322, v29323, 3, 2, 4) :|: TRUE f_1914(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29953, 0, v29313, v29314, v29315, v37794, v29317, v29318, v29309, v29321, v29322, v29323, 3, 2, 4) -> f_1922(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29953, 0, v29313, v29314, v29315, v37794, v29317, v29318, v29309, v29321, v29322, v29323, 3, 2, 4) :|: v37794 != 0 f_1914(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29953, 0, v29313, v29314, v29315, v37794, v29317, v29318, v29309, v29321, v29322, v29323, 3, 2, 4) -> f_1923(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29953, 0, v29313, v29314, v29315, v29317, v29318, v29309, v29321, v29322, v29323, 3, 2, 4) :|: v37794 = 0 f_1922(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29953, 0, v29313, v29314, v29315, v37794, v29317, v29318, v29309, v29321, v29322, v29323, 3, 2, 4) -> f_1929(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29953, 0, v29313, v29314, v29315, v37794, v29317, v29318, v29309, v29321, v29322, v29323, 3, 2, 4) :|: 0 = 0 f_1929(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29953, 0, v29313, v29314, v29315, v37794, v29317, v29318, v29309, v29321, v29322, v29323, 3, 2, 4) -> f_1937(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29953, 0, v29313, v29314, v29315, v37794, v29317, v29318, v29309, v29321, v29322, v29323, 3, 2, 4) :|: TRUE f_1937(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29953, 0, v29313, v29314, v29315, v37794, v29317, v29318, v29309, v29321, v29322, v29323, 3, 2, 4) -> f_1756(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29953, 0, v29313, v29314, v29315, v37794, v29317, v29318, v29309, v29953, v29321, v29322, v29323, 3, 2, 4) :|: TRUE f_1756(v29304, v29305, v29306, v29307, v29308, v29309, 1, v29311, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29319, v29320, v29321, v29322, v29323, 3, 2, 4) -> f_1764(v29304, v29305, v29306, v29307, v29308, v29309, 1, v29311, 0, v29313, v29314, v29315, v29316, v29317, v29318, v29320, v29321, v29322, v29323, 3, 2, 4) :|: 0 = 0 f_1923(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29953, 0, v29313, v29314, v29315, v29317, v29318, v29309, v29321, v29322, v29323, 3, 2, 4) -> f_1930(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29953, 0, v29313, v29314, v29315, v29317, v29318, v29309, v29321, v29322, v29323, 3, 2, 4) :|: 0 = 0 f_1930(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29953, 0, v29313, v29314, v29315, v29317, v29318, v29309, v29321, v29322, v29323, 3, 2, 4) -> f_1938(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29953, 0, v29313, v29314, v29315, v29317, v29318, v29309, v29321, v29322, v29323, 3, 2, 4) :|: TRUE f_1938(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29953, 0, v29313, v29314, v29315, v29317, v29318, v29309, v29321, v29322, v29323, 3, 2, 4) -> f_1758(v29304, v29305, v29306, v29307, v29308, v29568, 1, v29953, 0, v29313, v29314, v29315, v29317, v29318, v29309, v29953, v29321, v29322, v29323, 3, 2, 4) :|: TRUE f_1758(v29433, v29434, v29435, v29436, v29437, v29438, 1, v29440, 0, v29442, v29443, v29444, v29445, v29446, v29447, v29448, v29449, v29450, v29451, 3, 2, 4) -> f_1765(v29433, v29434, v29435, v29436, v29437, v29438, 1, v29440, 0, v29442, v29443, v29444, v29446, v29447, v29448, v29449, v29450, v29451, 3, 2, 4) :|: 0 = 0 f_1765(v29433, v29434, v29435, v29436, v29437, v29438, 1, v29440, 0, v29442, v29443, v29444, v29446, v29447, v29448, v29449, v29450, v29451, 3, 2, 4) -> f_1772(v29433, v29434, v29435, v29436, v29437, v29438, 1, v29440, 0, v29442, v29443, v29444, v29569, v29447, v29448, v29449, v29450, v29451, 3, 2, 4) :|: 1 + v29569 = v29440 && 0 <= v29569 f_1772(v29433, v29434, v29435, v29436, v29437, v29438, 1, v29440, 0, v29442, v29443, v29444, v29569, v29447, v29448, v29449, v29450, v29451, 3, 2, 4) -> f_1779(v29433, v29434, v29435, v29436, v29437, v29438, 1, v29440, 0, v29442, v29443, v29444, v29569, v29447, v29448, v29449, v29450, v29451, 3, 2, 4) :|: TRUE f_1779(v29433, v29434, v29435, v29436, v29437, v29438, 1, v29440, 0, v29442, v29443, v29444, v29569, v29447, v29448, v29449, v29450, v29451, 3, 2, 4) -> f_1785(v29433, v29434, v29435, v29436, v29437, v29438, 1, v29440, 0, v29442, v29443, v29444, v29569, v29447, v29448, v29449, v29450, v29451, 3, 2, 4) :|: TRUE f_1785(v29433, v29434, v29435, v29436, v29437, v29438, 1, v29440, 0, v29442, v29443, v29444, v29569, v29447, v29448, v29449, v29450, v29451, 3, 2, 4) -> f_1786(v29433, v29434, v29435, v29436, v29437, v29438, 1, v29440, 0, v29442, v29443, v29444, v29447, v29448, v29569, v29449, v29450, v29451, 3, 2, 4) :|: TRUE f_1786(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30085, 0, v30087, v30088, v30089, v30090, v30091, v30092, v30093, v30094, v30095, 3, 2, 4) -> f_1792(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30085, 0, v30087, v30088, v30089, v30090, v30091, v30092, v30093, v30094, v30095, 3, 2, 4) :|: TRUE f_1792(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30085, 0, v30087, v30088, v30089, v30090, v30091, v30092, v30093, v30094, v30095, 3, 2, 4) -> f_1798(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30085, 0, v30087, v30088, v30089, v30090, v30091, v30092, v30093, v30094, v30095, 3, 2, 4) :|: TRUE f_1798(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30085, 0, v30087, v30088, v30089, v30090, v30091, v30092, v30093, v30094, v30095, 3, 2, 4) -> f_1804(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30085, 0, v30087, v30088, v30089, v30090, v30091, v30092, v30093, v30094, v30095, 3, 2, 4) :|: 0 = 0 f_1804(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30085, 0, v30087, v30088, v30089, v30090, v30091, v30092, v30093, v30094, v30095, 3, 2, 4) -> f_1810(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30085, 0, v30087, v30088, v30089, v30090, v30091, v30092, v30093, v30094, v30095, 3, 2, 4) :|: 0 = 0 f_1810(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30085, 0, v30087, v30088, v30089, v30090, v30091, v30092, v30093, v30094, v30095, 3, 2, 4) -> f_1817(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30085, 0, v30087, v30088, v30089, v30090, v30091, v30092, v30093, v30094, v30095, 3, 2, 4) :|: TRUE f_1817(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30085, 0, v30087, v30088, v30089, v30090, v30091, v30092, v30093, v30094, v30095, 3, 2, 4) -> f_1825(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30092, 0, v30087, v30088, v30089, v30090, v30091, v30085, v30093, v30094, v30095, 3, 2, 4) :|: 0 = 0 f_1825(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30092, 0, v30087, v30088, v30089, v30090, v30091, v30085, v30093, v30094, v30095, 3, 2, 4) -> f_1833(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30092, 0, v30087, v30088, v30089, v30090, v30091, v30085, v30093, v30094, v30095, 3, 2, 4) :|: 0 < v30092 && 2 <= v30085 && 2 <= v30091 f_1833(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30092, 0, v30087, v30088, v30089, v30090, v30091, v30085, v30093, v30094, v30095, 3, 2, 4) -> f_1842(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30092, 0, v30087, v30088, v30089, v30090, v30091, v30085, v30093, v30094, v30095, 3, 2, 4) :|: 0 = 0 f_1842(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30092, 0, v30087, v30088, v30089, v30090, v30091, v30085, v30093, v30094, v30095, 3, 2, 4) -> f_1851(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30092, 0, v30087, v30088, v30089, v30090, v30091, v30085, v30093, v30094, v30095, 3, 2, 4) :|: 0 = 0 f_1851(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30092, 0, v30087, v30088, v30089, v30090, v30091, v30085, v30093, v30094, v30095, 3, 2, 4) -> f_1860(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30092, 0, v30087, v30088, v30089, v30090, v30091, v30085, v30093, v30094, v30095, 3, 2, 4) :|: TRUE f_1860(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30092, 0, v30087, v30088, v30089, v30090, v30091, v30085, v30093, v30094, v30095, 3, 2, 4) -> f_1869(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30092, 0, v30087, v30088, v30089, v30090, v30091, v30085, v30093, v30094, v30095, 3, 2, 4) :|: 0 = 0 f_1869(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30092, 0, v30087, v30088, v30089, v30090, v30091, v30085, v30093, v30094, v30095, 3, 2, 4) -> f_1877(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30092, 0, v30087, v30088, v30089, v30090, v30091, v30085, v30093, v30094, v30095, 3, 2, 4) :|: 0 = 0 f_1877(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30092, 0, v30087, v30088, v30089, v30090, v30091, v30085, v30093, v30094, v30095, 3, 2, 4) -> f_1884(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30092, 0, v30087, v30088, v30089, v30090, v30091, v30085, v30093, v30094, v30095, 3, 2, 4) :|: TRUE f_1884(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30092, 0, v30087, v30088, v30089, v30090, v30091, v30085, v30093, v30094, v30095, 3, 2, 4) -> f_1891(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30092, 0, v30087, v30088, v30089, v37024, v30090, v30091, v30085, v30093, v30094, v30095, 3, 2, 4) :|: TRUE f_1891(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30092, 0, v30087, v30088, v30089, v37024, v30090, v30091, v30085, v30093, v30094, v30095, 3, 2, 4) -> f_1898(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30092, 0, v30087, v30088, v30089, v37024, v30090, v30091, v30085, v30093, v30094, v30095, 3, 2, 4) :|: v37024 != 0 f_1891(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30092, 0, v30087, v30088, v30089, v37024, v30090, v30091, v30085, v30093, v30094, v30095, 3, 2, 4) -> f_1899(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30092, 0, v30087, v30088, v30089, v30090, v30091, v30085, v30093, v30094, v30095, 3, 2, 4) :|: v37024 = 0 f_1898(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30092, 0, v30087, v30088, v30089, v37024, v30090, v30091, v30085, v30093, v30094, v30095, 3, 2, 4) -> f_1907(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30092, 0, v30087, v30088, v30089, v37024, v30090, v30091, v30085, v30093, v30094, v30095, 3, 2, 4) :|: 0 = 0 f_1907(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30092, 0, v30087, v30088, v30089, v37024, v30090, v30091, v30085, v30093, v30094, v30095, 3, 2, 4) -> f_1915(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30092, 0, v30087, v30088, v30089, v37024, v30090, v30091, v30085, v30093, v30094, v30095, 3, 2, 4) :|: TRUE f_1915(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30092, 0, v30087, v30088, v30089, v37024, v30090, v30091, v30085, v30093, v30094, v30095, 3, 2, 4) -> f_1756(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30092, 0, v30087, v30088, v30089, v37024, v30085, v30092, v30090, v30091, v30093, v30094, v30095, 3, 2, 4) :|: TRUE f_1899(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30092, 0, v30087, v30088, v30089, v30090, v30091, v30085, v30093, v30094, v30095, 3, 2, 4) -> f_1908(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30092, 0, v30087, v30088, v30089, v30090, v30091, v30085, v30093, v30094, v30095, 3, 2, 4) :|: 0 = 0 f_1908(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30092, 0, v30087, v30088, v30089, v30090, v30091, v30085, v30093, v30094, v30095, 3, 2, 4) -> f_1916(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30092, 0, v30087, v30088, v30089, v30090, v30091, v30085, v30093, v30094, v30095, 3, 2, 4) :|: TRUE f_1916(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30092, 0, v30087, v30088, v30089, v30090, v30091, v30085, v30093, v30094, v30095, 3, 2, 4) -> f_1758(v30078, v30079, v30080, v30081, v30082, v30083, 1, v30092, 0, v30087, v30088, v30089, v30085, v30092, v30090, v30091, v30093, v30094, v30095, 3, 2, 4) :|: TRUE Combined rules. Obtained 6 rulesP rules: f_1764(v29304:0, v29305:0, v29306:0, v29307:0, v29308:0, 1 + v29568:0, 1, v29311:0, 0, v29313:0, v29314:0, v29315:0, v29316:0, v29317:0, v29318:0, v29320:0, v29321:0, v29322:0, v29323:0, 3, 2, 4) -> f_1891(v29304:0, v29305:0, v29306:0, v29307:0, v29308:0, v29568:0, 1, v29569:0, 0, v29313:0, v29314:0, v29315:0, v37024:0, 1 + v29568:0, 1 + v29569:0, 1 + v29569:0, v29321:0, v29322:0, v29323:0, 3, 2, 4) :|: v29568:0 > 0 && v29569:0 > 0 && v29315:0 > 2 f_1891(v30078:0, v30079:0, v30080:0, v30081:0, v30082:0, v30083:0, 1, v30092:0, 0, v30087:0, v30088:0, v30089:0, v37024:0, v30090:0, v30091:0, v30085:0, v30093:0, v30094:0, v30095:0, 3, 2, 4) -> f_1764(v30078:0, v30079:0, v30080:0, v30081:0, v30082:0, v30083:0, 1, v30092:0, 0, v30087:0, v30088:0, v30089:0, v37024:0, v30085:0, v30092:0, v30091:0, v30093:0, v30094:0, v30095:0, 3, 2, 4) :|: v37024:0 < 0 f_1891(v30078:0, v30079:0, v30080:0, v30081:0, v30082:0, v30083:0, 1, v30092:0, 0, v30087:0, v30088:0, v30089:0, v37024:0, v30090:0, v30091:0, v30085:0, v30093:0, v30094:0, v30095:0, 3, 2, 4) -> f_1764(v30078:0, v30079:0, v30080:0, v30081:0, v30082:0, v30083:0, 1, v30092:0, 0, v30087:0, v30088:0, v30089:0, v37024:0, v30085:0, v30092:0, v30091:0, v30093:0, v30094:0, v30095:0, 3, 2, 4) :|: v37024:0 > 0 f_1764(v29304:0, v29305:0, v29306:0, v29307:0, v29308:0, 1 + v29568:0, 1, v29311:0, 0, v29313:0, v29314:0, v29315:0, v29316:0, v29317:0, v29318:0, v29320:0, v29321:0, v29322:0, v29323:0, 3, 2, 4) -> f_1764(v29304:0, v29305:0, v29306:0, v29307:0, v29308:0, v29568:0, 1, v29953:0, 0, v29313:0, v29314:0, v29315:0, v37794:0, v29317:0, v29318:0, v29953:0, v29321:0, v29322:0, v29323:0, 3, 2, 4) :|: v29568:0 > 0 && v29315:0 > 2 && v37794:0 < 0 && v29953:0 > 0 f_1764(v29304:0, v29305:0, v29306:0, v29307:0, v29308:0, 1 + v29568:0, 1, v29311:0, 0, v29313:0, v29314:0, v29315:0, v29316:0, v29317:0, v29318:0, v29320:0, v29321:0, v29322:0, v29323:0, 3, 2, 4) -> f_1764(v29304:0, v29305:0, v29306:0, v29307:0, v29308:0, v29568:0, 1, v29953:0, 0, v29313:0, v29314:0, v29315:0, v37794:0, v29317:0, v29318:0, v29953:0, v29321:0, v29322:0, v29323:0, 3, 2, 4) :|: v29568:0 > 0 && v29315:0 > 2 && v37794:0 > 0 && v29953:0 > 0 f_1891(v30078:0, v30079:0, v30080:0, v30081:0, v30082:0, v30083:0, 1, 1 + v29569:0, 0, v30087:0, v30088:0, v30089:0, 0, v30090:0, v30091:0, v30085:0, v30093:0, v30094:0, v30095:0, 3, 2, 4) -> f_1891(v30078:0, v30079:0, v30080:0, v30081:0, v30082:0, v30083:0, 1, v29569:0, 0, v30087:0, v30088:0, v30089:0, v37024:1, v30090:0, v30091:0, 1 + v29569:0, v30093:0, v30094:0, v30095:0, 3, 2, 4) :|: v29569:0 > 0 && v30091:0 > 1 Filtered unneeded arguments: f_1764(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22) -> f_1764(x6, x12) f_1891(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22) -> f_1891(x6, x8, x12, x13, x15) Removed division, modulo operations, cleaned up constraints. Obtained 5 rules.P rules: f_1764(sum~cons_1~v29568:0, v29315:0) -> f_1891(v29568:0, v29569:0, v29315:0, v37024:0, 1 + v29569:0) :|: v29569:0 > 0 && v29315:0 > 2 && v29568:0 > 0 && sum~cons_1~v29568:0 = 1 + v29568:0 f_1891(v30083:0, v30092:0, v30089:0, v37024:0, v30091:0) -> f_1764(v30083:0, v30089:0) :|: v37024:0 < 0 f_1891(v30083:0, v30092:0, v30089:0, v37024:0, v30091:0) -> f_1764(v30083:0, v30089:0) :|: v37024:0 > 0 f_1764(sum~cons_1~v29568:0, v29315:0) -> f_1764(v29568:0, v29315:0) :|: v29568:0 > 0 && v29315:0 > 2 && sum~cons_1~v29568:0 = 1 + v29568:0 f_1891(v30083:0, sum~cons_1~v29569:0, v30089:0, cons_0, v30091:0) -> f_1891(v30083:0, v29569:0, v30089:0, v37024:1, v30091:0) :|: v29569:0 > 0 && v30091:0 > 1 && sum~cons_1~v29569:0 = 1 + v29569:0 && cons_0 = 0 ---------------------------------------- (37) Obligation: Rules: f_1764(sum~cons_1~v29568:0, v29315:0) -> f_1891(v29568:0, v29569:0, v29315:0, v37024:0, 1 + v29569:0) :|: v29569:0 > 0 && v29315:0 > 2 && v29568:0 > 0 && sum~cons_1~v29568:0 = 1 + v29568:0 f_1891(x, x1, x2, x3, x4) -> f_1764(x, x2) :|: x3 < 0 f_1891(x5, x6, x7, x8, x9) -> f_1764(x5, x7) :|: x8 > 0 f_1764(x10, x11) -> f_1764(x12, x11) :|: x12 > 0 && x11 > 2 && x10 = 1 + x12 f_1891(x13, x14, x15, x16, x17) -> f_1891(x13, x18, x15, x19, x17) :|: x18 > 0 && x17 > 1 && x14 = 1 + x18 && x16 = 0 ---------------------------------------- (38) IRS2T2 (EQUIVALENT) Transformed input IRS into an integer transition system.Used the following mapping from defined symbols to location IDs: (f_1764_5,1) (f_1891_5,2) ---------------------------------------- (39) Obligation: START: 0; FROM: 0; TO: 1; FROM: 0; TO: 2; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := x4; oldX5 := oldX0 - 1; oldX6 := nondet(); oldX7 := nondet(); assume(oldX6 > 0 && oldX1 > 2 && oldX5 > 0 && oldX0 = 1 + oldX5); x0 := oldX0 - 1; x1 := oldX6; x2 := oldX1; x3 := oldX7; x4 := 1 + oldX6; TO: 2; FROM: 2; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := x4; oldX5 := nondet(); oldX6 := nondet(); oldX7 := nondet(); assume(oldX3 < 0); x0 := oldX0; x1 := oldX2; x2 := oldX5; x3 := oldX6; x4 := oldX7; TO: 1; FROM: 2; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := x4; oldX5 := nondet(); oldX6 := nondet(); oldX7 := nondet(); assume(oldX3 > 0); x0 := oldX0; x1 := oldX2; x2 := oldX5; x3 := oldX6; x4 := oldX7; TO: 1; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := x4; oldX5 := oldX0 - 1; oldX6 := nondet(); oldX7 := nondet(); oldX8 := nondet(); assume(oldX5 > 0 && oldX1 > 2 && oldX0 = 1 + oldX5); x0 := oldX0 - 1; x1 := oldX1; x2 := oldX6; x3 := oldX7; x4 := oldX8; TO: 1; FROM: 2; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := x4; oldX5 := oldX1 - 1; oldX6 := nondet(); assume(oldX5 > 0 && oldX4 > 1 && oldX1 = 1 + oldX5 && oldX3 = 0); x0 := oldX0; x1 := oldX1 - 1; x2 := oldX2; x3 := oldX6; x4 := oldX4; TO: 2; ---------------------------------------- (40) T2 (EQUIVALENT) Initially, performed program simplifications using lexicographic rank functions: * Removed transitions 2, 5, 6, 14, 17, 18, 19 using the following rank functions: - Rank function 1: RF for loc. 6: -1+4*x0 RF for loc. 7: 4*x0 RF for loc. 8: -4+4*x0 RF for loc. 12: 4*x0 Bound for (chained) transitions 6: 4 - Rank function 2: RF for loc. 6: -1+3*x0 RF for loc. 7: 3*x0 RF for loc. 8: -2+3*x0 RF for loc. 12: 3*x0 Bound for (chained) transitions 5: 4 - Rank function 3: RF for loc. 6: -1 RF for loc. 7: 0 RF for loc. 8: -2 RF for loc. 12: 0 Bound for (chained) transitions 2: -1 Bound for (chained) transitions 17: 0 Bound for (chained) transitions 18: 0 - Rank function 4: RF for loc. 7: 2*x1 RF for loc. 12: -1+2*x1 Bound for (chained) transitions 19: 3 - Rank function 5: RF for loc. 7: 0 RF for loc. 12: -1 Bound for (chained) transitions 14: 0 ---------------------------------------- (41) YES ---------------------------------------- (42) Obligation: SCC ---------------------------------------- (43) SCC2IRS (SOUND) Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: Generated rules. Obtained 25 rulesP rules: f_1436(v17197, v17198, v17199, v17200, v17201, v17202, 1, v17204, 0, v17206, v17207, v17208, v17209, v17210, v17211, v17212, v17213, v17214, 3, 2, 4) -> f_1445(v17197, v17198, v17199, v17200, v17201, v17202, 1, v17204, 0, v17206, v17207, v17208, v17209, v17210, v17211, v17212, v17213, v17214, 3, 2, 4) :|: TRUE f_1445(v17197, v17198, v17199, v17200, v17201, v17202, 1, v17204, 0, v17206, v17207, v17208, v17209, v17210, v17211, v17212, v17213, v17214, 3, 2, 4) -> f_1453(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17204, v17202, 0, v17206, v17207, v17208, v17209, v17211, v17212, v17213, v17214, 3, 2, 4) :|: 0 = 0 f_1453(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17204, v17202, 0, v17206, v17207, v17208, v17209, v17211, v17212, v17213, v17214, 3, 2, 4) -> f_1460(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17204, v17202, 0, v17206, v17207, v17208, v17209, v17211, v17212, v17213, v17214, 3, 2, 4) :|: v17210 != 0 && 2 <= v17202 && 2 <= v17208 f_1460(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17204, v17202, 0, v17206, v17207, v17208, v17209, v17211, v17212, v17213, v17214, 3, 2, 4) -> f_1466(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17204, v17202, 0, v17206, v17207, v17208, v17209, v17211, v17212, v17213, v17214, 3, 2, 4) :|: 0 = 0 f_1466(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17204, v17202, 0, v17206, v17207, v17208, v17209, v17211, v17212, v17213, v17214, 3, 2, 4) -> f_1473(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17204, v17202, 0, v17206, v17207, v17208, v17209, v17211, v17212, v17213, v17214, 3, 2, 4) :|: TRUE f_1473(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17204, v17202, 0, v17206, v17207, v17208, v17209, v17211, v17212, v17213, v17214, 3, 2, 4) -> f_1481(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17211, v17202, 0, v17206, v17207, v17208, v17209, v17212, v17213, v17214, 3, 2, 4) :|: 0 = 0 f_1481(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17211, v17202, 0, v17206, v17207, v17208, v17209, v17212, v17213, v17214, 3, 2, 4) -> f_1490(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17211, v17202, 0, v17206, v17207, v17208, v17209, v17212, v17213, v17214, 3, 2, 4) :|: 0 < v17211 f_1490(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17211, v17202, 0, v17206, v17207, v17208, v17209, v17212, v17213, v17214, 3, 2, 4) -> f_1499(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17211, v17202, 0, v17206, v17207, v17208, v17209, v17212, v17213, v17214, 3, 2, 4) :|: 0 = 0 f_1499(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17211, v17202, 0, v17206, v17207, v17208, v17209, v17212, v17213, v17214, 3, 2, 4) -> f_1510(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17211, v17202, 0, v17206, v17207, v17208, v17209, v17212, v17213, v17214, 3, 2, 4) :|: 0 = 0 f_1510(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17211, v17202, 0, v17206, v17207, v17208, v17209, v17212, v17213, v17214, 3, 2, 4) -> f_1523(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17211, v17202, 0, v17206, v17207, v17208, v17209, v17212, v17213, v17214, 3, 2, 4) :|: TRUE f_1523(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17211, v17202, 0, v17206, v17207, v17208, v17209, v17212, v17213, v17214, 3, 2, 4) -> f_1536(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17211, 0, v17206, v17207, v17208, v17209, v17202, v17212, v17213, v17214, 3, 2, 4) :|: 0 = 0 f_1536(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17211, 0, v17206, v17207, v17208, v17209, v17202, v17212, v17213, v17214, 3, 2, 4) -> f_1547(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17211, 0, v17206, v17207, v17208, v17209, v17202, v17212, v17213, v17214, 3, 2, 4) :|: 0 = 0 f_1547(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17211, 0, v17206, v17207, v17208, v17209, v17202, v17212, v17213, v17214, 3, 2, 4) -> f_1558(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17211, 0, v17206, v17207, v17208, v17209, v17202, v17212, v17213, v17214, 3, 2, 4) :|: TRUE f_1558(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17211, 0, v17206, v17207, v17208, v17209, v17202, v17212, v17213, v17214, 3, 2, 4) -> f_1568(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17211, 0, v17206, v17207, v17208, v20308, v17202, v17212, v17213, v17214, 3, 2, 4) :|: TRUE f_1568(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17211, 0, v17206, v17207, v17208, v20308, v17202, v17212, v17213, v17214, 3, 2, 4) -> f_1578(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17211, 0, v17206, v17207, v17208, v20308, v17202, v17212, v17213, v17214, 3, 2, 4) :|: v20308 != 0 f_1578(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17211, 0, v17206, v17207, v17208, v20308, v17202, v17212, v17213, v17214, 3, 2, 4) -> f_1588(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17211, 0, v17206, v17207, v17208, v20308, v17202, v17212, v17213, v17214, 3, 2, 4) :|: 0 = 0 f_1588(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17211, 0, v17206, v17207, v17208, v20308, v17202, v17212, v17213, v17214, 3, 2, 4) -> f_1597(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17211, 0, v17206, v17207, v17208, v20308, v17202, v17212, v17213, v17214, 3, 2, 4) :|: TRUE f_1597(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17211, 0, v17206, v17207, v17208, v20308, v17202, v17212, v17213, v17214, 3, 2, 4) -> f_1604(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17211, 0, v17206, v17207, v17208, v20308, v17212, v17213, v17214, 3, 2, 4) :|: 0 = 0 f_1604(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17211, 0, v17206, v17207, v17208, v20308, v17212, v17213, v17214, 3, 2, 4) -> f_1611(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17211, 0, v17206, v17207, v17208, v20308, v22104, v17212, v17213, v17214, 3, 2, 4) :|: 1 + v22104 = v17210 && 0 <= v22104 f_1611(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17211, 0, v17206, v17207, v17208, v20308, v22104, v17212, v17213, v17214, 3, 2, 4) -> f_1618(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17211, 0, v17206, v17207, v17208, v20308, v22104, v17212, v17213, v17214, 3, 2, 4) :|: TRUE f_1618(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17211, 0, v17206, v17207, v17208, v20308, v22104, v17212, v17213, v17214, 3, 2, 4) -> f_1625(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17211, 0, v17206, v17207, v17208, v20308, v22104, v22843, v17212, v17213, v17214, 3, 2, 4) :|: TRUE f_1625(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17211, 0, v17206, v17207, v17208, v20308, v22104, v22843, v17212, v17213, v17214, 3, 2, 4) -> f_1633(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17211, 0, v17206, v17207, v17208, v20308, v22104, v22843, v17212, v17213, v17214, 3, 2, 4) :|: TRUE f_1633(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17211, 0, v17206, v17207, v17208, v20308, v22104, v22843, v17212, v17213, v17214, 3, 2, 4) -> f_1642(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17211, 0, v17206, v17207, v17208, v20308, v22104, v22843, v17212, v17213, v17214, 3, 2, 4) :|: TRUE f_1642(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17211, 0, v17206, v17207, v17208, v20308, v22104, v22843, v17212, v17213, v17214, 3, 2, 4) -> f_1427(v17197, v17198, v17199, v17200, v17201, v17210, 1, v17211, 0, v17206, v17207, v17208, v20308, v22104, v22843, v17212, v17213, v17214, 3, 2, 4) :|: TRUE f_1427(v17197, v17198, v17199, v17200, v17201, v17202, 1, v17204, 0, v17206, v17207, v17208, v17209, v17210, v17211, v17212, v17213, v17214, 3, 2, 4) -> f_1436(v17197, v17198, v17199, v17200, v17201, v17202, 1, v17204, 0, v17206, v17207, v17208, v17209, v17210, v17211, v17212, v17213, v17214, 3, 2, 4) :|: TRUE Combined rules. Obtained 2 rulesP rules: f_1436(v17197:0, v17198:0, v17199:0, v17200:0, v17201:0, v17202:0, 1, v17204:0, 0, v17206:0, v17207:0, v17208:0, v17209:0, 1 + v22104:0, v17211:0, v17212:0, v17213:0, v17214:0, 3, 2, 4) -> f_1436(v17197:0, v17198:0, v17199:0, v17200:0, v17201:0, 1 + v22104:0, 1, v17211:0, 0, v17206:0, v17207:0, v17208:0, v20308:0, v22104:0, v22843:0, v17212:0, v17213:0, v17214:0, 3, 2, 4) :|: v17202:0 > 1 && v22104:0 > -1 && v17208:0 > 1 && v17211:0 > 0 && v20308:0 < 0 f_1436(v17197:0, v17198:0, v17199:0, v17200:0, v17201:0, v17202:0, 1, v17204:0, 0, v17206:0, v17207:0, v17208:0, v17209:0, 1 + v22104:0, v17211:0, v17212:0, v17213:0, v17214:0, 3, 2, 4) -> f_1436(v17197:0, v17198:0, v17199:0, v17200:0, v17201:0, 1 + v22104:0, 1, v17211:0, 0, v17206:0, v17207:0, v17208:0, v20308:0, v22104:0, v22843:0, v17212:0, v17213:0, v17214:0, 3, 2, 4) :|: v17202:0 > 1 && v22104:0 > -1 && v17208:0 > 1 && v17211:0 > 0 && v20308:0 > 0 Filtered unneeded arguments: f_1436(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21) -> f_1436(x6, x12, x14, x15) Removed division, modulo operations, cleaned up constraints. Obtained 1 rules.P rules: f_1436(v17202:0, v17208:0, sum~cons_1~v22104:0, v17211:0) -> f_1436(1 + v22104:0, v17208:0, v22104:0, v22843:0) :|: v22104:0 > -1 && v17202:0 > 1 && v17211:0 > 0 && v17208:0 > 1 && sum~cons_1~v22104:0 = 1 + v22104:0 ---------------------------------------- (44) Obligation: Rules: f_1436(v17202:0, v17208:0, sum~cons_1~v22104:0, v17211:0) -> f_1436(1 + v22104:0, v17208:0, v22104:0, v22843:0) :|: v22104:0 > -1 && v17202:0 > 1 && v17211:0 > 0 && v17208:0 > 1 && sum~cons_1~v22104:0 = 1 + v22104:0 ---------------------------------------- (45) IRS2T2 (EQUIVALENT) Transformed input IRS into an integer transition system.Used the following mapping from defined symbols to location IDs: (f_1436_4,1) ---------------------------------------- (46) Obligation: START: 0; FROM: 0; TO: 1; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := oldX2 - 1; oldX5 := nondet(); assume(oldX4 > -1 && oldX0 > 1 && oldX3 > 0 && oldX1 > 1 && oldX2 = 1 + oldX4); x0 := 1 + oldX4; x1 := oldX1; x2 := oldX2 - 1; x3 := oldX5; TO: 1; ---------------------------------------- (47) T2 (EQUIVALENT) Initially, performed program simplifications using lexicographic rank functions: * Removed transitions 1, 3, 4 using the following rank functions: - Rank function 1: RF for loc. 5: 1+2*x2 RF for loc. 6: 2*x2 Bound for (chained) transitions 3: 2 Bound for (chained) transitions 4: 2 - Rank function 2: RF for loc. 5: 0 RF for loc. 6: -1 Bound for (chained) transitions 1: 0 ---------------------------------------- (48) YES ---------------------------------------- (49) Obligation: SCC ---------------------------------------- (50) SCC2IRS (SOUND) Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: Generated rules. Obtained 59 rulesP rules: f_1389(v16364, v16365, v16366, v16367, v16368, v16369, 1, v16371, 0, v16373, v16374, v16375, v16376, v16377, v16378, v16379, 3, 2, 4) -> f_1395(v16364, v16365, v16366, v16367, v16368, v16369, 1, v16371, 0, v16373, v16374, v16375, v16376, v16377, v16378, v16379, 3, 2, 4) :|: TRUE f_1395(v16364, v16365, v16366, v16367, v16368, v16369, 1, v16371, 0, v16373, v16374, v16375, v16376, v16377, v16378, v16379, 3, 2, 4) -> f_1402(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, v16369, 0, v16373, v16374, v16375, v16377, v16378, v16379, 3, 2, 4) :|: 0 = 0 f_1402(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, v16369, 0, v16373, v16374, v16375, v16377, v16378, v16379, 3, 2, 4) -> f_1410(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, v16369, 0, v16373, v16374, v16375, v16377, v16378, v16379, 3, 2, 4) :|: v16376 != 0 f_1410(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, v16369, 0, v16373, v16374, v16375, v16377, v16378, v16379, 3, 2, 4) -> f_1420(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, v16369, 0, v16373, v16374, v16375, v16377, v16378, v16379, 3, 2, 4) :|: 0 = 0 f_1420(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, v16369, 0, v16373, v16374, v16375, v16377, v16378, v16379, 3, 2, 4) -> f_1430(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, v16369, 0, v16373, v16374, v16375, v16377, v16378, v16379, 3, 2, 4) :|: TRUE f_1430(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, v16369, 0, v16373, v16374, v16375, v16377, v16378, v16379, 3, 2, 4) -> f_1439(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, v16369, 0, v16373, v16374, v16375, v16377, v16378, v16379, 3, 2, 4) :|: 0 = 0 f_1439(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, v16369, 0, v16373, v16374, v16375, v16377, v16378, v16379, 3, 2, 4) -> f_1448(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, v16369, 0, v16373, v16374, v16375, v16377, v16378, v16379, 3, 2, 4) :|: 0 = 0 f_1448(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, v16369, 0, v16373, v16374, v16375, v16377, v16378, v16379, 3, 2, 4) -> f_1455(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, v16369, 0, v16373, v16374, v16375, v16377, v16378, v16379, 3, 2, 4) :|: 0 = 0 f_1455(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, v16369, 0, v16373, v16374, v16375, v16377, v16378, v16379, 3, 2, 4) -> f_1463(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, v16369, 0, v16373, v16374, v16375, v16377, v16378, v16379, 3, 2, 4) :|: TRUE f_1463(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, v16369, 0, v16373, v16374, v16375, v16377, v16378, v16379, 3, 2, 4) -> f_1469(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, 0, v16373, v16374, v16375, v16369, v16377, v16378, v16379, 3, 2, 4) :|: 0 = 0 f_1469(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, 0, v16373, v16374, v16375, v16369, v16377, v16378, v16379, 3, 2, 4) -> f_1477(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, 0, v16373, v16374, v16375, v16369, v16377, v16378, v16379, 3, 2, 4) :|: v16376 <= 0 && 1 + v16369 <= 0 && 1 + v16375 <= 0 f_1477(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, 0, v16373, v16374, v16375, v16369, v16377, v16378, v16379, 3, 2, 4) -> f_1486(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, 0, v16373, v16374, v16375, v16369, v16377, v16378, v16379, 3, 2, 4) :|: 0 = 0 f_1486(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, 0, v16373, v16374, v16375, v16369, v16377, v16378, v16379, 3, 2, 4) -> f_1495(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, 0, v16373, v16374, v16375, v16369, v16377, v16378, v16379, 3, 2, 4) :|: TRUE f_1495(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, 0, v16373, v16374, v16375, v16369, v16377, v16378, v16379, 3, 2, 4) -> f_1504(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, 0, v19234, v16374, v16375, v16369, v16377, v16378, v16379, 3, 2, 4) :|: TRUE f_1504(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, 0, v19234, v16374, v16375, v16369, v16377, v16378, v16379, 3, 2, 4) -> f_1516(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, 0, v19234, v16374, v16375, v16369, v16377, v16378, v16379, 3, 2, 4) :|: v19234 != 0 f_1504(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, 0, v19234, v16374, v16375, v16369, v16377, v16378, v16379, 3, 2, 4) -> f_1517(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, 0, v16374, v16375, v16369, v16377, v16378, v16379, 3, 2, 4) :|: v19234 = 0 f_1516(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, 0, v19234, v16374, v16375, v16369, v16377, v16378, v16379, 3, 2, 4) -> f_1529(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, 0, v19234, v16374, v16375, v16369, v16377, v16378, v16379, 3, 2, 4) :|: 0 = 0 f_1529(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, 0, v19234, v16374, v16375, v16369, v16377, v16378, v16379, 3, 2, 4) -> f_1541(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, 0, v19234, v16374, v16375, v16369, v16377, v16378, v16379, 3, 2, 4) :|: TRUE f_1541(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, 0, v19234, v16374, v16375, v16369, v16377, v16378, v16379, 3, 2, 4) -> f_1744(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, 0, v19234, v16374, v16375, v16369, v16376, v16377, v16378, v16379, 3, 2, 4) :|: TRUE f_1744(v29047, v29048, v29049, v29050, v29051, v29052, 1, v29054, 0, v29056, v29057, v29058, v29059, v29060, v29061, v29062, v29063, 3, 2, 4) -> f_1753(v29047, v29048, v29049, v29050, v29051, v29052, 1, v29054, 0, v29056, v29057, v29058, v29060, v29061, v29062, v29063, 3, 2, 4) :|: 0 = 0 f_1753(v29047, v29048, v29049, v29050, v29051, v29052, 1, v29054, 0, v29056, v29057, v29058, v29060, v29061, v29062, v29063, 3, 2, 4) -> f_1762(v29047, v29048, v29049, v29050, v29051, v29052, 1, v29054, 0, v29056, v29057, v29058, v29562, v29061, v29062, v29063, 3, 2, 4) :|: v29562 = 1 + v29052 && v29562 <= 1 f_1762(v29047, v29048, v29049, v29050, v29051, v29052, 1, v29054, 0, v29056, v29057, v29058, v29562, v29061, v29062, v29063, 3, 2, 4) -> f_1769(v29047, v29048, v29049, v29050, v29051, v29052, 1, v29054, 0, v29056, v29057, v29058, v29562, v29061, v29062, v29063, 3, 2, 4) :|: TRUE f_1769(v29047, v29048, v29049, v29050, v29051, v29052, 1, v29054, 0, v29056, v29057, v29058, v29562, v29061, v29062, v29063, 3, 2, 4) -> f_1776(v29047, v29048, v29049, v29050, v29051, v29052, 1, v29054, 0, v29056, v29057, v29058, v29562, v29061, v29062, v29063, 3, 2, 4) :|: TRUE f_1776(v29047, v29048, v29049, v29050, v29051, v29052, 1, v29054, 0, v29056, v29057, v29058, v29562, v29061, v29062, v29063, 3, 2, 4) -> f_1383(v29047, v29048, v29049, v29050, v29051, v29052, 1, v29054, 0, v29056, v29057, v29058, v29562, v29061, v29062, v29063, 3, 2, 4) :|: TRUE f_1383(v16364, v16365, v16366, v16367, v16368, v16369, 1, v16371, 0, v16373, v16374, v16375, v16376, v16377, v16378, v16379, 3, 2, 4) -> f_1389(v16364, v16365, v16366, v16367, v16368, v16369, 1, v16371, 0, v16373, v16374, v16375, v16376, v16377, v16378, v16379, 3, 2, 4) :|: TRUE f_1517(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, 0, v16374, v16375, v16369, v16377, v16378, v16379, 3, 2, 4) -> f_1530(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, 0, v16374, v16375, v16369, v16377, v16378, v16379, 3, 2, 4) :|: 0 = 0 f_1530(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, 0, v16374, v16375, v16369, v16377, v16378, v16379, 3, 2, 4) -> f_1542(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, 0, v16374, v16375, v16369, v16377, v16378, v16379, 3, 2, 4) :|: TRUE f_1542(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, 0, v16374, v16375, v16369, v16377, v16378, v16379, 3, 2, 4) -> f_1746(v16364, v16365, v16366, v16367, v16368, v16376, 1, v16371, 0, v16374, v16375, v16369, v16376, v16377, v16378, v16379, 3, 2, 4) :|: TRUE f_1746(v29085, v29086, v29087, v29088, v29089, v29090, 1, v29092, 0, v29094, v29095, v29096, v29097, v29098, v29099, v29100, 3, 2, 4) -> f_1754(v29085, v29086, v29087, v29088, v29089, v29090, 1, v29092, 0, v29095, v29096, v29097, v29098, v29099, v29100, 3, 2, 4) :|: 0 = 0 f_1754(v29085, v29086, v29087, v29088, v29089, v29090, 1, v29092, 0, v29095, v29096, v29097, v29098, v29099, v29100, 3, 2, 4) -> f_1763(v29085, v29086, v29087, v29088, v29089, v29090, 1, v29092, 0, v29563, v29095, v29096, v29097, v29098, v29099, v29100, 3, 2, 4) :|: 1 + v29563 = v29092 && 0 <= v29563 f_1763(v29085, v29086, v29087, v29088, v29089, v29090, 1, v29092, 0, v29563, v29095, v29096, v29097, v29098, v29099, v29100, 3, 2, 4) -> f_1770(v29085, v29086, v29087, v29088, v29089, v29090, 1, v29092, 0, v29563, v29095, v29096, v29097, v29098, v29099, v29100, 3, 2, 4) :|: TRUE f_1770(v29085, v29086, v29087, v29088, v29089, v29090, 1, v29092, 0, v29563, v29095, v29096, v29097, v29098, v29099, v29100, 3, 2, 4) -> f_1777(v29085, v29086, v29087, v29088, v29089, v29090, 1, v29092, 0, v29563, v29691, v29096, v29097, v29098, v29099, v29100, 3, 2, 4) :|: TRUE f_1777(v29085, v29086, v29087, v29088, v29089, v29090, 1, v29092, 0, v29563, v29691, v29096, v29097, v29098, v29099, v29100, 3, 2, 4) -> f_1783(v29085, v29086, v29087, v29088, v29089, v29090, 1, v29092, 0, v29563, v29691, v29096, v29097, v29098, v29099, v29100, 3, 2, 4) :|: TRUE f_1783(v29085, v29086, v29087, v29088, v29089, v29090, 1, v29092, 0, v29563, v29691, v29096, v29097, v29098, v29099, v29100, 3, 2, 4) -> f_1790(v29085, v29086, v29087, v29088, v29089, v29090, 1, v29092, 0, v29563, v29691, v29096, v29097, v29098, v29099, v29100, 3, 2, 4) :|: TRUE f_1790(v29085, v29086, v29087, v29088, v29089, v29090, 1, v29092, 0, v29563, v29691, v29096, v29097, v29098, v29099, v29100, 3, 2, 4) -> f_1603(v29085, v29086, v29087, v29088, v29089, v29090, 1, v29092, 0, v29096, v29097, v29563, v29691, v29098, v29099, v29100, 3, 4) :|: TRUE f_1603(v21802, v21803, v21804, v21805, v21806, v21807, 1, v21809, 0, v21811, v21812, v21813, v21814, v21815, v21816, v21817, 3, 4) -> f_1610(v21802, v21803, v21804, v21805, v21806, v21807, 1, v21809, 0, v21811, v21812, v21813, v21814, v21815, v21816, v21817, 3, 4) :|: TRUE f_1610(v21802, v21803, v21804, v21805, v21806, v21807, 1, v21809, 0, v21811, v21812, v21813, v21814, v21815, v21816, v21817, 3, 4) -> f_1617(v21802, v21803, v21804, v21805, v21806, v21807, 1, v21809, 0, v21811, v21812, v21813, v21814, v21815, v21816, v21817, 3, 4) :|: TRUE f_1617(v21802, v21803, v21804, v21805, v21806, v21807, 1, v21809, 0, v21811, v21812, v21813, v21814, v21815, v21816, v21817, 3, 4) -> f_1624(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21809, v21807, 0, v21811, v21812, v21813, v21815, v21816, v21817, 3, 4) :|: 0 = 0 f_1624(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21809, v21807, 0, v21811, v21812, v21813, v21815, v21816, v21817, 3, 4) -> f_1631(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21809, v21807, 0, v21811, v21812, v21813, v21815, v21816, v21817, 3, 4) :|: v21814 != 0 f_1631(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21809, v21807, 0, v21811, v21812, v21813, v21815, v21816, v21817, 3, 4) -> f_1640(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21809, v21807, 0, v21811, v21812, v21813, v21815, v21816, v21817, 3, 4) :|: 0 = 0 f_1640(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21809, v21807, 0, v21811, v21812, v21813, v21815, v21816, v21817, 3, 4) -> f_1649(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21809, v21807, 0, v21811, v21812, v21813, v21815, v21816, v21817, 3, 4) :|: TRUE f_1649(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21809, v21807, 0, v21811, v21812, v21813, v21815, v21816, v21817, 3, 4) -> f_1656(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21813, v21807, 0, v21811, v21812, v21809, v21815, v21816, v21817, 3, 4) :|: 0 = 0 f_1656(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21813, v21807, 0, v21811, v21812, v21809, v21815, v21816, v21817, 3, 4) -> f_1663(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21813, v21807, 0, v21811, v21812, v21809, v21815, v21816, v21817, 3, 2, 4) :|: 0 < v21813 && 2 <= v21809 && 2 <= v21806 f_1663(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21813, v21807, 0, v21811, v21812, v21809, v21815, v21816, v21817, 3, 2, 4) -> f_1668(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21813, v21807, 0, v21811, v21812, v21809, v21815, v21816, v21817, 3, 2, 4) :|: 0 = 0 f_1668(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21813, v21807, 0, v21811, v21812, v21809, v21815, v21816, v21817, 3, 2, 4) -> f_1673(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21813, v21807, 0, v21811, v21812, v21809, v21815, v21816, v21817, 3, 2, 4) :|: 0 = 0 f_1673(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21813, v21807, 0, v21811, v21812, v21809, v21815, v21816, v21817, 3, 2, 4) -> f_1679(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21813, v21807, 0, v21811, v21812, v21809, v21815, v21816, v21817, 3, 2, 4) :|: TRUE f_1679(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21813, v21807, 0, v21811, v21812, v21809, v21815, v21816, v21817, 3, 2, 4) -> f_1685(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21813, 0, v21811, v21812, v21809, v21815, v21816, v21817, 3, 2, 4) :|: 0 = 0 f_1685(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21813, 0, v21811, v21812, v21809, v21815, v21816, v21817, 3, 2, 4) -> f_1693(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21813, 0, v21811, v21812, v21809, v21815, v21816, v21817, 3, 2, 4) :|: v21814 <= 0 f_1693(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21813, 0, v21811, v21812, v21809, v21815, v21816, v21817, 3, 2, 4) -> f_1701(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21813, 0, v21811, v21812, v21809, v21815, v21816, v21817, 3, 2, 4) :|: 0 = 0 f_1701(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21813, 0, v21811, v21812, v21809, v21815, v21816, v21817, 3, 2, 4) -> f_1708(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21813, 0, v21811, v21812, v21809, v21815, v21816, v21817, 3, 2, 4) :|: TRUE f_1708(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21813, 0, v21811, v21812, v21809, v21815, v21816, v21817, 3, 2, 4) -> f_1715(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21813, 0, v28471, v21811, v21812, v21809, v21815, v21816, v21817, 3, 2, 4) :|: TRUE f_1715(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21813, 0, v28471, v21811, v21812, v21809, v21815, v21816, v21817, 3, 2, 4) -> f_1723(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21813, 0, v28471, v21811, v21812, v21809, v21815, v21816, v21817, 3, 2, 4) :|: v28471 != 0 f_1715(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21813, 0, v28471, v21811, v21812, v21809, v21815, v21816, v21817, 3, 2, 4) -> f_1724(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21813, 0, v21811, v21812, v21809, v21815, v21816, v21817, 3, 2, 4) :|: v28471 = 0 f_1723(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21813, 0, v28471, v21811, v21812, v21809, v21815, v21816, v21817, 3, 2, 4) -> f_1732(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21813, 0, v28471, v21811, v21812, v21809, v21815, v21816, v21817, 3, 2, 4) :|: 0 = 0 f_1732(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21813, 0, v28471, v21811, v21812, v21809, v21815, v21816, v21817, 3, 2, 4) -> f_1743(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21813, 0, v28471, v21811, v21812, v21809, v21815, v21816, v21817, 3, 2, 4) :|: TRUE f_1743(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21813, 0, v28471, v21811, v21812, v21809, v21815, v21816, v21817, 3, 2, 4) -> f_1744(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21813, 0, v28471, v21809, v21814, v21811, v21812, v21815, v21816, v21817, 3, 2, 4) :|: TRUE f_1724(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21813, 0, v21811, v21812, v21809, v21815, v21816, v21817, 3, 2, 4) -> f_1733(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21813, 0, v21811, v21812, v21809, v21815, v21816, v21817, 3, 2, 4) :|: 0 = 0 f_1733(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21813, 0, v21811, v21812, v21809, v21815, v21816, v21817, 3, 2, 4) -> f_1745(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21813, 0, v21811, v21812, v21809, v21815, v21816, v21817, 3, 2, 4) :|: TRUE f_1745(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21813, 0, v21811, v21812, v21809, v21815, v21816, v21817, 3, 2, 4) -> f_1746(v21802, v21803, v21804, v21805, v21806, v21814, 1, v21813, 0, v21809, v21814, v21811, v21812, v21815, v21816, v21817, 3, 2, 4) :|: TRUE Combined rules. Obtained 12 rulesP rules: f_1389(v16364:0, v16365:0, v16366:0, v16367:0, v16368:0, v16369:0, 1, 1 + v29563:0, 0, v16373:0, v16374:0, v16375:0, v16376:0, v16377:0, v16378:0, v16379:0, 3, 2, 4) -> f_1715(v16364:0, v16365:0, v16366:0, v16367:0, v16368:0, v29691:0, 1, v29563:0, 0, v28471:0, v16369:0, v16376:0, 1 + v29563:0, v16377:0, v16378:0, v16379:0, 3, 2, 4) :|: v29563:0 > 0 && v16376:0 < 0 && v16369:0 < 0 && v16376:0 < 1 && v16375:0 < 0 && v29691:0 < 0 && v29691:0 < 1 && v16368:0 > 1 f_1389(v16364:0, v16365:0, v16366:0, v16367:0, v16368:0, v16369:0, 1, 1 + v29563:0, 0, v16373:0, v16374:0, v16375:0, v16376:0, v16377:0, v16378:0, v16379:0, 3, 2, 4) -> f_1715(v16364:0, v16365:0, v16366:0, v16367:0, v16368:0, v29691:0, 1, v29563:0, 0, v28471:0, v16369:0, v16376:0, 1 + v29563:0, v16377:0, v16378:0, v16379:0, 3, 2, 4) :|: v29563:0 > 0 && v16376:0 < 0 && v16369:0 < 0 && v16376:0 < 1 && v16375:0 < 0 && v29691:0 > 0 && v29691:0 < 1 && v16368:0 > 1 f_1389(v16364:0, v16365:0, v16366:0, v16367:0, v16368:0, v16369:0, 1, 1 + v29563:0, 0, v16373:0, v16374:0, v16375:0, v16376:0, v16377:0, v16378:0, v16379:0, 3, 2, 4) -> f_1715(v16364:0, v16365:0, v16366:0, v16367:0, v16368:0, v29691:0, 1, v29563:0, 0, v28471:0, v16369:0, v16376:0, 1 + v29563:0, v16377:0, v16378:0, v16379:0, 3, 2, 4) :|: v29563:0 > 0 && v16376:0 > 0 && v16369:0 < 0 && v16376:0 < 1 && v16375:0 < 0 && v29691:0 < 0 && v29691:0 < 1 && v16368:0 > 1 f_1389(v16364:0, v16365:0, v16366:0, v16367:0, v16368:0, v16369:0, 1, 1 + v29563:0, 0, v16373:0, v16374:0, v16375:0, v16376:0, v16377:0, v16378:0, v16379:0, 3, 2, 4) -> f_1715(v16364:0, v16365:0, v16366:0, v16367:0, v16368:0, v29691:0, 1, v29563:0, 0, v28471:0, v16369:0, v16376:0, 1 + v29563:0, v16377:0, v16378:0, v16379:0, 3, 2, 4) :|: v29563:0 > 0 && v16376:0 > 0 && v16369:0 < 0 && v16376:0 < 1 && v16375:0 < 0 && v29691:0 > 0 && v29691:0 < 1 && v16368:0 > 1 f_1389(v16364:0, v16365:0, v16366:0, v16367:0, v16368:0, v16369:0, 1, v16371:0, 0, v16373:0, v16374:0, v16375:0, v16376:0, v16377:0, v16378:0, v16379:0, 3, 2, 4) -> f_1389(v16364:0, v16365:0, v16366:0, v16367:0, v16368:0, v16376:0, 1, v16371:0, 0, v19234:0, v16374:0, v16375:0, 1 + v16376:0, v16377:0, v16378:0, v16379:0, 3, 2, 4) :|: v16376:0 < 0 && v16369:0 < 0 && v16376:0 < 1 && v16375:0 < 0 && v19234:0 < 0 f_1389(v16364:0, v16365:0, v16366:0, v16367:0, v16368:0, v16369:0, 1, v16371:0, 0, v16373:0, v16374:0, v16375:0, v16376:0, v16377:0, v16378:0, v16379:0, 3, 2, 4) -> f_1389(v16364:0, v16365:0, v16366:0, v16367:0, v16368:0, v16376:0, 1, v16371:0, 0, v19234:0, v16374:0, v16375:0, 1 + v16376:0, v16377:0, v16378:0, v16379:0, 3, 2, 4) :|: v16376:0 < 0 && v16369:0 < 0 && v16376:0 < 1 && v16375:0 < 0 && v19234:0 > 0 f_1389(v16364:0, v16365:0, v16366:0, v16367:0, v16368:0, v16369:0, 1, v16371:0, 0, v16373:0, v16374:0, v16375:0, v16376:0, v16377:0, v16378:0, v16379:0, 3, 2, 4) -> f_1389(v16364:0, v16365:0, v16366:0, v16367:0, v16368:0, v16376:0, 1, v16371:0, 0, v19234:0, v16374:0, v16375:0, 1 + v16376:0, v16377:0, v16378:0, v16379:0, 3, 2, 4) :|: v16376:0 > 0 && v16369:0 < 0 && v16376:0 < 1 && v16375:0 < 0 && v19234:0 < 0 f_1389(v16364:0, v16365:0, v16366:0, v16367:0, v16368:0, v16369:0, 1, v16371:0, 0, v16373:0, v16374:0, v16375:0, v16376:0, v16377:0, v16378:0, v16379:0, 3, 2, 4) -> f_1389(v16364:0, v16365:0, v16366:0, v16367:0, v16368:0, v16376:0, 1, v16371:0, 0, v19234:0, v16374:0, v16375:0, 1 + v16376:0, v16377:0, v16378:0, v16379:0, 3, 2, 4) :|: v16376:0 > 0 && v16369:0 < 0 && v16376:0 < 1 && v16375:0 < 0 && v19234:0 > 0 f_1715(v21802:0, v21803:0, v21804:0, v21805:0, v21806:0, v21814:0, 1, v21813:0, 0, v28471:0, v21811:0, v21812:0, v21809:0, v21815:0, v21816:0, v21817:0, 3, 2, 4) -> f_1389(v21802:0, v21803:0, v21804:0, v21805:0, v21806:0, v21814:0, 1, v21813:0, 0, v28471:0, v21809:0, v21814:0, 1 + v21814:0, v21815:0, v21816:0, v21817:0, 3, 2, 4) :|: v28471:0 < 0 && v21814:0 < 1 f_1715(v21802:0, v21803:0, v21804:0, v21805:0, v21806:0, v21814:0, 1, v21813:0, 0, v28471:0, v21811:0, v21812:0, v21809:0, v21815:0, v21816:0, v21817:0, 3, 2, 4) -> f_1389(v21802:0, v21803:0, v21804:0, v21805:0, v21806:0, v21814:0, 1, v21813:0, 0, v28471:0, v21809:0, v21814:0, 1 + v21814:0, v21815:0, v21816:0, v21817:0, 3, 2, 4) :|: v28471:0 > 0 && v21814:0 < 1 f_1715(v21802:0, v21803:0, v21804:0, v21805:0, v21806:0, v21814:0, 1, 1 + v29563:0, 0, 0, v21811:0, v21812:0, v21809:0, v21815:0, v21816:0, v21817:0, 3, 2, 4) -> f_1715(v21802:0, v21803:0, v21804:0, v21805:0, v21806:0, v29691:0, 1, v29563:0, 0, v28471:1, v21811:0, v21812:0, 1 + v29563:0, v21815:0, v21816:0, v21817:0, 3, 2, 4) :|: v29563:0 > 0 && v29691:0 < 0 && v29691:0 < 1 && v21806:0 > 1 f_1715(v21802:0, v21803:0, v21804:0, v21805:0, v21806:0, v21814:0, 1, 1 + v29563:0, 0, 0, v21811:0, v21812:0, v21809:0, v21815:0, v21816:0, v21817:0, 3, 2, 4) -> f_1715(v21802:0, v21803:0, v21804:0, v21805:0, v21806:0, v29691:0, 1, v29563:0, 0, v28471:1, v21811:0, v21812:0, 1 + v29563:0, v21815:0, v21816:0, v21817:0, 3, 2, 4) :|: v29563:0 > 0 && v29691:0 > 0 && v29691:0 < 1 && v21806:0 > 1 Filtered unneeded arguments: f_1389(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19) -> f_1389(x5, x6, x8, x12, x13) f_1715(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19) -> f_1715(x5, x6, x8, x10) Removed division, modulo operations, cleaned up constraints. Obtained 10 rules.P rules: f_1389(v16368:0, v16369:0, sum~cons_1~v29563:0, v16375:0, v16376:0) -> f_1715(v16368:0, v29691:0, v29563:0, v28471:0) :|: v16376:0 < 0 && v29563:0 > 0 && v16369:0 < 0 && v16376:0 < 1 && v16375:0 < 0 && v29691:0 < 0 && v16368:0 > 1 && v29691:0 < 1 && sum~cons_1~v29563:0 = 1 + v29563:0 f_1389(v16368:0, v16369:0, sum~cons_1~v29563:0, v16375:0, v16376:0) -> f_1715(v16368:0, v29691:0, v29563:0, v28471:0) :|: v16376:0 < 0 && v29563:0 > 0 && v16369:0 < 0 && v16376:0 < 1 && v16375:0 < 0 && v29691:0 > 0 && v16368:0 > 1 && v29691:0 < 1 && sum~cons_1~v29563:0 = 1 + v29563:0 f_1389(v16368:0, v16369:0, sum~cons_1~v29563:0, v16375:0, v16376:0) -> f_1715(v16368:0, v29691:0, v29563:0, v28471:0) :|: v16376:0 > 0 && v29563:0 > 0 && v16369:0 < 0 && v16376:0 < 1 && v16375:0 < 0 && v29691:0 < 0 && v16368:0 > 1 && v29691:0 < 1 && sum~cons_1~v29563:0 = 1 + v29563:0 f_1389(v16368:0, v16369:0, sum~cons_1~v29563:0, v16375:0, v16376:0) -> f_1715(v16368:0, v29691:0, v29563:0, v28471:0) :|: v16376:0 > 0 && v29563:0 > 0 && v16369:0 < 0 && v16376:0 < 1 && v16375:0 < 0 && v29691:0 > 0 && v16368:0 > 1 && v29691:0 < 1 && sum~cons_1~v29563:0 = 1 + v29563:0 f_1389(v16368:0, v16369:0, v16371:0, v16375:0, v16376:0) -> f_1389(v16368:0, v16376:0, v16371:0, v16375:0, 1 + v16376:0) :|: v16369:0 < 0 && v16376:0 < 0 && v16375:0 < 0 && v16376:0 < 1 f_1389(v16368:0, v16369:0, v16371:0, v16375:0, v16376:0) -> f_1389(v16368:0, v16376:0, v16371:0, v16375:0, 1 + v16376:0) :|: v16369:0 < 0 && v16376:0 > 0 && v16375:0 < 0 && v16376:0 < 1 f_1715(v21806:0, v21814:0, v21813:0, v28471:0) -> f_1389(v21806:0, v21814:0, v21813:0, v21814:0, 1 + v21814:0) :|: v28471:0 < 0 && v21814:0 < 1 f_1715(v21806:0, v21814:0, v21813:0, v28471:0) -> f_1389(v21806:0, v21814:0, v21813:0, v21814:0, 1 + v21814:0) :|: v28471:0 > 0 && v21814:0 < 1 f_1715(v21806:0, v21814:0, sum~cons_1~v29563:0, cons_0) -> f_1715(v21806:0, v29691:0, v29563:0, v28471:1) :|: v29691:0 < 0 && v29563:0 > 0 && v21806:0 > 1 && v29691:0 < 1 && sum~cons_1~v29563:0 = 1 + v29563:0 && cons_0 = 0 f_1715(v21806:0, v21814:0, sum~cons_1~v29563:0, cons_0) -> f_1715(v21806:0, v29691:0, v29563:0, v28471:1) :|: v29691:0 > 0 && v29563:0 > 0 && v21806:0 > 1 && v29691:0 < 1 && sum~cons_1~v29563:0 = 1 + v29563:0 && cons_0 = 0 ---------------------------------------- (51) Obligation: Rules: f_1389(v16368:0, v16369:0, sum~cons_1~v29563:0, v16375:0, v16376:0) -> f_1715(v16368:0, v29691:0, v29563:0, v28471:0) :|: v16376:0 < 0 && v29563:0 > 0 && v16369:0 < 0 && v16376:0 < 1 && v16375:0 < 0 && v29691:0 < 0 && v16368:0 > 1 && v29691:0 < 1 && sum~cons_1~v29563:0 = 1 + v29563:0 f_1389(x, x1, x2, x3, x4) -> f_1715(x, x5, x6, x7) :|: x4 < 0 && x6 > 0 && x1 < 0 && x4 < 1 && x3 < 0 && x5 > 0 && x > 1 && x5 < 1 && x2 = 1 + x6 f_1389(x8, x9, x10, x11, x12) -> f_1715(x8, x13, x14, x15) :|: x12 > 0 && x14 > 0 && x9 < 0 && x12 < 1 && x11 < 0 && x13 < 0 && x8 > 1 && x13 < 1 && x10 = 1 + x14 f_1389(x16, x17, x18, x19, x20) -> f_1715(x16, x21, x22, x23) :|: x20 > 0 && x22 > 0 && x17 < 0 && x20 < 1 && x19 < 0 && x21 > 0 && x16 > 1 && x21 < 1 && x18 = 1 + x22 f_1389(x24, x25, x26, x27, x28) -> f_1389(x24, x28, x26, x27, 1 + x28) :|: x25 < 0 && x28 < 0 && x27 < 0 && x28 < 1 f_1389(x29, x30, x31, x32, x33) -> f_1389(x29, x33, x31, x32, 1 + x33) :|: x30 < 0 && x33 > 0 && x32 < 0 && x33 < 1 f_1715(x34, x35, x36, x37) -> f_1389(x34, x35, x36, x35, 1 + x35) :|: x37 < 0 && x35 < 1 f_1715(x38, x39, x40, x41) -> f_1389(x38, x39, x40, x39, 1 + x39) :|: x41 > 0 && x39 < 1 f_1715(x42, x43, x44, x45) -> f_1715(x42, x46, x47, x48) :|: x46 < 0 && x47 > 0 && x42 > 1 && x46 < 1 && x44 = 1 + x47 && x45 = 0 f_1715(x49, x50, x51, x52) -> f_1715(x49, x53, x54, x55) :|: x53 > 0 && x54 > 0 && x49 > 1 && x53 < 1 && x51 = 1 + x54 && x52 = 0 ---------------------------------------- (52) IRS2T2 (EQUIVALENT) Transformed input IRS into an integer transition system.Used the following mapping from defined symbols to location IDs: (f_1389_5,1) (f_1715_5,2) ---------------------------------------- (53) Obligation: START: 0; FROM: 0; TO: 1; FROM: 0; TO: 2; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := x4; oldX6 := oldX2 - 1; oldX5 := nondet(); oldX7 := nondet(); oldX8 := nondet(); assume(oldX4 < 0 && oldX6 > 0 && oldX1 < 0 && oldX4 < 1 && oldX3 < 0 && oldX5 < 0 && oldX0 > 1 && oldX5 < 1 && oldX2 = 1 + oldX6); x0 := oldX0; x1 := oldX5; x2 := oldX2 - 1; x3 := oldX7; x4 := oldX8; TO: 2; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := x4; oldX6 := oldX2 - 1; oldX5 := nondet(); oldX7 := nondet(); oldX8 := nondet(); assume(oldX4 < 0 && oldX6 > 0 && oldX1 < 0 && oldX4 < 1 && oldX3 < 0 && oldX5 > 0 && oldX0 > 1 && oldX5 < 1 && oldX2 = 1 + oldX6); x0 := oldX0; x1 := oldX5; x2 := oldX2 - 1; x3 := oldX7; x4 := oldX8; TO: 2; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := x4; oldX6 := oldX2 - 1; oldX5 := nondet(); oldX7 := nondet(); oldX8 := nondet(); assume(oldX4 > 0 && oldX6 > 0 && oldX1 < 0 && oldX4 < 1 && oldX3 < 0 && oldX5 < 0 && oldX0 > 1 && oldX5 < 1 && oldX2 = 1 + oldX6); x0 := oldX0; x1 := oldX5; x2 := oldX2 - 1; x3 := oldX7; x4 := oldX8; TO: 2; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := x4; oldX6 := oldX2 - 1; oldX5 := nondet(); oldX7 := nondet(); oldX8 := nondet(); assume(oldX4 > 0 && oldX6 > 0 && oldX1 < 0 && oldX4 < 1 && oldX3 < 0 && oldX5 > 0 && oldX0 > 1 && oldX5 < 1 && oldX2 = 1 + oldX6); x0 := oldX0; x1 := oldX5; x2 := oldX2 - 1; x3 := oldX7; x4 := oldX8; TO: 2; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := x4; assume(oldX1 < 0 && oldX4 < 0 && oldX3 < 0 && oldX4 < 1); x0 := oldX0; x1 := oldX4; x2 := oldX2; x3 := oldX3; x4 := 1 + oldX4; TO: 1; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := x4; assume(oldX1 < 0 && oldX4 > 0 && oldX3 < 0 && oldX4 < 1); x0 := oldX0; x1 := oldX4; x2 := oldX2; x3 := oldX3; x4 := 1 + oldX4; TO: 1; FROM: 2; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := x4; assume(oldX3 < 0 && oldX1 < 1); x0 := oldX0; x1 := oldX1; x2 := oldX2; x3 := oldX1; x4 := 1 + oldX1; TO: 1; FROM: 2; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := x4; assume(oldX3 > 0 && oldX1 < 1); x0 := oldX0; x1 := oldX1; x2 := oldX2; x3 := oldX1; x4 := 1 + oldX1; TO: 1; FROM: 2; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := x4; oldX6 := oldX2 - 1; oldX5 := nondet(); oldX7 := nondet(); oldX8 := nondet(); assume(oldX5 < 0 && oldX6 > 0 && oldX0 > 1 && oldX5 < 1 && oldX2 = 1 + oldX6 && oldX3 = 0); x0 := oldX0; x1 := oldX5; x2 := oldX2 - 1; x3 := oldX7; x4 := oldX8; TO: 2; FROM: 2; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := x4; oldX6 := oldX2 - 1; oldX5 := nondet(); oldX7 := nondet(); oldX8 := nondet(); assume(oldX5 > 0 && oldX6 > 0 && oldX0 > 1 && oldX5 < 1 && oldX2 = 1 + oldX6 && oldX3 = 0); x0 := oldX0; x1 := oldX5; x2 := oldX2 - 1; x3 := oldX7; x4 := oldX8; TO: 2; ---------------------------------------- (54) T2 (EQUIVALENT) Initially, performed program simplifications using lexicographic rank functions: * Removed transitions 2, 5, 6, 7, 8, 9, 10, 26, 29, 30, 31, 32 using the following rank functions: - Rank function 1: RF for loc. 6: -3+5*x2 RF for loc. 7: 1+5*x2 RF for loc. 8: -3+5*x2 RF for loc. 12: 5*x2 Bound for (chained) transitions 5: 7 Bound for (chained) transitions 6: 7 Bound for (chained) transitions 7: 7 Bound for (chained) transitions 8: 7 Bound for (chained) transitions 32: 10 - Rank function 2: RF for loc. 6: 2*x2+2*x3-2*x4 RF for loc. 7: 2*x2 RF for loc. 8: -1+2*x2+2*x3-2*x4 RF for loc. 12: -1+2*x2 Bound for (chained) transitions 31: 3 - Rank function 3: RF for loc. 6: 3*x3-3*x4 RF for loc. 7: -1 RF for loc. 8: -1+3*x3-3*x4 RF for loc. 12: -2 Bound for (chained) transitions 26: -1 Bound for (chained) transitions 29: -2 Bound for (chained) transitions 30: -2 - Rank function 4: RF for loc. 6: 1-2*x4 RF for loc. 8: -2*x4 Bound for (chained) transitions 9: 0 Bound for (chained) transitions 10: 0 - Rank function 5: RF for loc. 6: 0 RF for loc. 8: -1 Bound for (chained) transitions 2: 0 ---------------------------------------- (55) YES ---------------------------------------- (56) Obligation: SCC ---------------------------------------- (57) SCC2IRS (SOUND) Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: Generated rules. Obtained 22 rulesP rules: f_1370(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15696, 0, v15698, v15699, v15700, v15701, v15702, v15703, 3, 2, 4) -> f_1379(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15696, 0, v15698, v15699, v15700, v15701, v15702, v15703, 3, 2, 4) :|: TRUE f_1379(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15696, 0, v15698, v15699, v15700, v15701, v15702, v15703, 3, 2, 4) -> f_1388(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15696, 0, v15698, v15699, v15700, v15701, v15702, v15703, 3, 2, 4) :|: 0 = 0 f_1388(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15696, 0, v15698, v15699, v15700, v15701, v15702, v15703, 3, 2, 4) -> f_1394(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15696, 0, v15698, v15699, v15700, v15701, v15702, v15703, 3, 2, 4) :|: 0 = 0 f_1394(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15696, 0, v15698, v15699, v15700, v15701, v15702, v15703, 3, 2, 4) -> f_1401(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15696, 0, v15698, v15699, v15700, v15701, v15702, v15703, 3, 2, 4) :|: TRUE f_1401(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15696, 0, v15698, v15699, v15700, v15701, v15702, v15703, 3, 2, 4) -> f_1409(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15700, 0, v15698, v15699, v15696, v15701, v15702, v15703, 3, 2, 4) :|: 0 = 0 f_1409(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15700, 0, v15698, v15699, v15696, v15701, v15702, v15703, 3, 2, 4) -> f_1418(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15700, 0, v15698, v15699, v15696, v15701, v15702, v15703, 3, 2, 4) :|: 0 < v15700 && 2 <= v15696 && 2 <= v15699 && 3 <= v15698 && 3 <= v15693 f_1418(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15700, 0, v15698, v15699, v15696, v15701, v15702, v15703, 3, 2, 4) -> f_1428(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15700, 0, v15698, v15699, v15696, v15701, v15702, v15703, 3, 2, 4) :|: 0 = 0 f_1428(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15700, 0, v15698, v15699, v15696, v15701, v15702, v15703, 3, 2, 4) -> f_1437(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15700, 0, v15698, v15699, v15696, v15701, v15702, v15703, 3, 2, 4) :|: 0 = 0 f_1437(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15700, 0, v15698, v15699, v15696, v15701, v15702, v15703, 3, 2, 4) -> f_1446(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15700, 0, v15698, v15699, v15696, v15701, v15702, v15703, 3, 2, 4) :|: TRUE f_1446(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15700, 0, v15698, v15699, v15696, v15701, v15702, v15703, 3, 2, 4) -> f_1454(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15700, 0, v15698, v15699, v15696, v15701, v15702, v15703, 3, 2, 4) :|: 0 = 0 f_1454(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15700, 0, v15698, v15699, v15696, v15701, v15702, v15703, 3, 2, 4) -> f_1462(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15700, 0, v15698, v15699, v15696, v15701, v15702, v15703, 3, 2, 4) :|: 0 = 0 f_1462(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15700, 0, v15698, v15699, v15696, v15701, v15702, v15703, 3, 2, 4) -> f_1468(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15700, 0, v15698, v15699, v15696, v15701, v15702, v15703, 3, 2, 4) :|: TRUE f_1468(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15700, 0, v15698, v15699, v15696, v15701, v15702, v15703, 3, 2, 4) -> f_1475(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15700, 0, v15698, v15699, v18728, v15696, v15701, v15702, v15703, 3, 2, 4) :|: TRUE f_1475(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15700, 0, v15698, v15699, v18728, v15696, v15701, v15702, v15703, 3, 2, 4) -> f_1484(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15700, 0, v15698, v15699, v15696, v15701, v15702, v15703, 3, 2, 4) :|: v18728 = 0 f_1484(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15700, 0, v15698, v15699, v15696, v15701, v15702, v15703, 3, 2, 4) -> f_1493(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15700, 0, v15698, v15699, v15696, v15701, v15702, v15703, 3, 2, 4) :|: 0 = 0 f_1493(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15700, 0, v15698, v15699, v15696, v15701, v15702, v15703, 3, 2, 4) -> f_1502(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15700, 0, v15698, v15699, v15696, v15701, v15702, v15703, 3, 2, 4) :|: TRUE f_1502(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15700, 0, v15698, v15699, v15696, v15701, v15702, v15703, 3, 2, 4) -> f_1513(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15700, 0, v15698, v15699, v15701, v15702, v15703, 3, 2, 4) :|: 0 = 0 f_1513(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15700, 0, v15698, v15699, v15701, v15702, v15703, 3, 2, 4) -> f_1526(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15700, 0, v15698, v15699, v19841, v15701, v15702, v15703, 3, 2, 4) :|: 1 + v19841 = v15700 && 0 <= v19841 f_1526(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15700, 0, v15698, v15699, v19841, v15701, v15702, v15703, 3, 2, 4) -> f_1538(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15700, 0, v15698, v15699, v19841, v15701, v15702, v15703, 3, 2, 4) :|: TRUE f_1538(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15700, 0, v15698, v15699, v19841, v15701, v15702, v15703, 3, 2, 4) -> f_1549(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15700, 0, v15698, v15699, v19841, v15701, v15702, v15703, 3, 2, 4) :|: TRUE f_1549(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15700, 0, v15698, v15699, v19841, v15701, v15702, v15703, 3, 2, 4) -> f_1357(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15700, 0, v15698, v15699, v19841, v15701, v15702, v15703, 3, 2, 4) :|: TRUE f_1357(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15696, 0, v15698, v15699, v15700, v15701, v15702, v15703, 3, 2, 4) -> f_1370(v15689, v15690, v15691, v15692, v15693, v15694, 1, v15696, 0, v15698, v15699, v15700, v15701, v15702, v15703, 3, 2, 4) :|: TRUE Combined rules. Obtained 1 rulesP rules: f_1370(v15689:0, v15690:0, v15691:0, v15692:0, v15693:0, v15694:0, 1, v15696:0, 0, v15698:0, v15699:0, 1 + v19841:0, v15701:0, v15702:0, v15703:0, 3, 2, 4) -> f_1370(v15689:0, v15690:0, v15691:0, v15692:0, v15693:0, v15694:0, 1, 1 + v19841:0, 0, v15698:0, v15699:0, v19841:0, v15701:0, v15702:0, v15703:0, 3, 2, 4) :|: v15696:0 > 1 && v19841:0 > -1 && v15699:0 > 1 && v15698:0 > 2 && v15693:0 > 2 Filtered unneeded arguments: f_1370(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18) -> f_1370(x5, x8, x10, x11, x12) Removed division, modulo operations, cleaned up constraints. Obtained 1 rules.P rules: f_1370(v15693:0, v15696:0, v15698:0, v15699:0, sum~cons_1~v19841:0) -> f_1370(v15693:0, 1 + v19841:0, v15698:0, v15699:0, v19841:0) :|: v19841:0 > -1 && v15696:0 > 1 && v15699:0 > 1 && v15693:0 > 2 && v15698:0 > 2 && sum~cons_1~v19841:0 = 1 + v19841:0 ---------------------------------------- (58) Obligation: Rules: f_1370(v15693:0, v15696:0, v15698:0, v15699:0, sum~cons_1~v19841:0) -> f_1370(v15693:0, 1 + v19841:0, v15698:0, v15699:0, v19841:0) :|: v19841:0 > -1 && v15696:0 > 1 && v15699:0 > 1 && v15693:0 > 2 && v15698:0 > 2 && sum~cons_1~v19841:0 = 1 + v19841:0 ---------------------------------------- (59) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (60) Obligation: Rules: f_1370(v15693:0:0, v15696:0:0, v15698:0:0, v15699:0:0, sum~cons_1~v19841:0:0) -> f_1370(v15693:0:0, 1 + v19841:0:0, v15698:0:0, v15699:0:0, v19841:0:0) :|: v15693:0:0 > 2 && v15698:0:0 > 2 && v15699:0:0 > 1 && v15696:0:0 > 1 && v19841:0:0 > -1 && sum~cons_1~v19841:0:0 = 1 + v19841:0:0 ---------------------------------------- (61) RankingReductionPairProof (EQUIVALENT) Interpretation: [ f_1370 ] = f_1370_5 The following rules are decreasing: f_1370(v15693:0:0, v15696:0:0, v15698:0:0, v15699:0:0, sum~cons_1~v19841:0:0) -> f_1370(v15693:0:0, 1 + v19841:0:0, v15698:0:0, v15699:0:0, v19841:0:0) :|: v15693:0:0 > 2 && v15698:0:0 > 2 && v15699:0:0 > 1 && v15696:0:0 > 1 && v19841:0:0 > -1 && sum~cons_1~v19841:0:0 = 1 + v19841:0:0 The following rules are bounded: f_1370(v15693:0:0, v15696:0:0, v15698:0:0, v15699:0:0, sum~cons_1~v19841:0:0) -> f_1370(v15693:0:0, 1 + v19841:0:0, v15698:0:0, v15699:0:0, v19841:0:0) :|: v15693:0:0 > 2 && v15698:0:0 > 2 && v15699:0:0 > 1 && v15696:0:0 > 1 && v19841:0:0 > -1 && sum~cons_1~v19841:0:0 = 1 + v19841:0:0 ---------------------------------------- (62) YES ---------------------------------------- (63) Obligation: SCC ---------------------------------------- (64) SCC2IRS (SOUND) Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: Generated rules. Obtained 22 rulesP rules: f_1249(v13890, v13891, v13892, v13893, v13894, 1, v13896, v13897, 0, v13899, v13900, v13901, v13902, 3, 4) -> f_1260(v13890, v13891, v13892, v13893, v13894, 1, v13896, v13897, 0, v13899, v13900, v13901, v13902, 3, 4) :|: TRUE f_1260(v13890, v13891, v13892, v13893, v13894, 1, v13896, v13897, 0, v13899, v13900, v13901, v13902, 3, 4) -> f_1272(v13890, v13891, v13892, v13893, v13894, 1, v13896, v13897, 0, v13899, v13900, v13901, v13902, 3, 4) :|: 0 = 0 f_1272(v13890, v13891, v13892, v13893, v13894, 1, v13896, v13897, 0, v13899, v13900, v13901, v13902, 3, 4) -> f_1285(v13890, v13891, v13892, v13893, v13894, 1, v13896, v13897, 0, v13899, v13900, v13901, v13902, 3, 4) :|: 0 = 0 f_1285(v13890, v13891, v13892, v13893, v13894, 1, v13896, v13897, 0, v13899, v13900, v13901, v13902, 3, 4) -> f_1298(v13890, v13891, v13892, v13893, v13894, 1, v13896, v13897, 0, v13899, v13900, v13901, v13902, 3, 4) :|: TRUE f_1298(v13890, v13891, v13892, v13893, v13894, 1, v13896, v13897, 0, v13899, v13900, v13901, v13902, 3, 4) -> f_1310(v13890, v13891, v13892, v13893, v13894, 1, v13899, v13897, 0, v13896, v13900, v13901, v13902, 3, 4) :|: 0 = 0 f_1310(v13890, v13891, v13892, v13893, v13894, 1, v13899, v13897, 0, v13896, v13900, v13901, v13902, 3, 4) -> f_1322(v13890, v13891, v13892, v13893, v13894, 1, v13899, v13897, 0, v13896, v13900, v13901, v13902, 3, 2, 4) :|: 0 < v13899 && 2 <= v13896 && 2 <= v13894 f_1322(v13890, v13891, v13892, v13893, v13894, 1, v13899, v13897, 0, v13896, v13900, v13901, v13902, 3, 2, 4) -> f_1335(v13890, v13891, v13892, v13893, v13894, 1, v13899, v13897, 0, v13896, v13900, v13901, v13902, 3, 2, 4) :|: 0 = 0 f_1335(v13890, v13891, v13892, v13893, v13894, 1, v13899, v13897, 0, v13896, v13900, v13901, v13902, 3, 2, 4) -> f_1348(v13890, v13891, v13892, v13893, v13894, 1, v13899, v13897, 0, v13896, v13900, v13901, v13902, 3, 2, 4) :|: 0 = 0 f_1348(v13890, v13891, v13892, v13893, v13894, 1, v13899, v13897, 0, v13896, v13900, v13901, v13902, 3, 2, 4) -> f_1362(v13890, v13891, v13892, v13893, v13894, 1, v13899, v13897, 0, v13896, v13900, v13901, v13902, 3, 2, 4) :|: TRUE f_1362(v13890, v13891, v13892, v13893, v13894, 1, v13899, v13897, 0, v13896, v13900, v13901, v13902, 3, 2, 4) -> f_1375(v13890, v13891, v13892, v13893, v13894, 1, v13899, v13897, 0, v13896, v13900, v13901, v13902, 3, 2, 4) :|: 0 = 0 f_1375(v13890, v13891, v13892, v13893, v13894, 1, v13899, v13897, 0, v13896, v13900, v13901, v13902, 3, 2, 4) -> f_1384(v13890, v13891, v13892, v13893, v13894, 1, v13899, v13897, 0, v13896, v13900, v13901, v13902, 3, 2, 4) :|: 0 = 0 f_1384(v13890, v13891, v13892, v13893, v13894, 1, v13899, v13897, 0, v13896, v13900, v13901, v13902, 3, 2, 4) -> f_1390(v13890, v13891, v13892, v13893, v13894, 1, v13899, v13897, 0, v13896, v13900, v13901, v13902, 3, 2, 4) :|: TRUE f_1390(v13890, v13891, v13892, v13893, v13894, 1, v13899, v13897, 0, v13896, v13900, v13901, v13902, 3, 2, 4) -> f_1396(v13890, v13891, v13892, v13893, v13894, 1, v13899, v13897, 0, v16592, v13896, v13900, v13901, v13902, 3, 2, 4) :|: TRUE f_1396(v13890, v13891, v13892, v13893, v13894, 1, v13899, v13897, 0, v16592, v13896, v13900, v13901, v13902, 3, 2, 4) -> f_1404(v13890, v13891, v13892, v13893, v13894, 1, v13899, v13897, 0, v13896, v13900, v13901, v13902, 3, 2, 4) :|: v16592 = 0 f_1404(v13890, v13891, v13892, v13893, v13894, 1, v13899, v13897, 0, v13896, v13900, v13901, v13902, 3, 2, 4) -> f_1413(v13890, v13891, v13892, v13893, v13894, 1, v13899, v13897, 0, v13896, v13900, v13901, v13902, 3, 2, 4) :|: 0 = 0 f_1413(v13890, v13891, v13892, v13893, v13894, 1, v13899, v13897, 0, v13896, v13900, v13901, v13902, 3, 2, 4) -> f_1423(v13890, v13891, v13892, v13893, v13894, 1, v13899, v13897, 0, v13896, v13900, v13901, v13902, 3, 2, 4) :|: TRUE f_1423(v13890, v13891, v13892, v13893, v13894, 1, v13899, v13897, 0, v13896, v13900, v13901, v13902, 3, 2, 4) -> f_1433(v13890, v13891, v13892, v13893, v13894, 1, v13899, v13897, 0, v13900, v13901, v13902, 3, 2, 4) :|: 0 = 0 f_1433(v13890, v13891, v13892, v13893, v13894, 1, v13899, v13897, 0, v13900, v13901, v13902, 3, 2, 4) -> f_1442(v13890, v13891, v13892, v13893, v13894, 1, v13899, v13897, 0, v17695, v13900, v13901, v13902, 3, 2, 4) :|: 1 + v17695 = v13899 && 0 <= v17695 f_1442(v13890, v13891, v13892, v13893, v13894, 1, v13899, v13897, 0, v17695, v13900, v13901, v13902, 3, 2, 4) -> f_1450(v13890, v13891, v13892, v13893, v13894, 1, v13899, v13897, 0, v17695, v13900, v13901, v13902, 3, 2, 4) :|: TRUE f_1450(v13890, v13891, v13892, v13893, v13894, 1, v13899, v13897, 0, v17695, v13900, v13901, v13902, 3, 2, 4) -> f_1457(v13890, v13891, v13892, v13893, v13894, 1, v13899, v13897, 0, v17695, v13900, v13901, v13902, 3, 2, 4) :|: TRUE f_1457(v13890, v13891, v13892, v13893, v13894, 1, v13899, v13897, 0, v17695, v13900, v13901, v13902, 3, 2, 4) -> f_1239(v13890, v13891, v13892, v13893, v13894, 1, v13899, v13897, 0, v17695, v13900, v13901, v13902, 3, 4) :|: TRUE f_1239(v13890, v13891, v13892, v13893, v13894, 1, v13896, v13897, 0, v13899, v13900, v13901, v13902, 3, 4) -> f_1249(v13890, v13891, v13892, v13893, v13894, 1, v13896, v13897, 0, v13899, v13900, v13901, v13902, 3, 4) :|: TRUE Combined rules. Obtained 1 rulesP rules: f_1249(v13890:0, v13891:0, v13892:0, v13893:0, v13894:0, 1, v13896:0, v13897:0, 0, 1 + v17695:0, v13900:0, v13901:0, v13902:0, 3, 4) -> f_1249(v13890:0, v13891:0, v13892:0, v13893:0, v13894:0, 1, 1 + v17695:0, v13897:0, 0, v17695:0, v13900:0, v13901:0, v13902:0, 3, 4) :|: v13896:0 > 1 && v17695:0 > -1 && v13894:0 > 1 Filtered unneeded arguments: f_1249(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15) -> f_1249(x5, x7, x10) Removed division, modulo operations, cleaned up constraints. Obtained 1 rules.P rules: f_1249(v13894:0, v13896:0, sum~cons_1~v17695:0) -> f_1249(v13894:0, 1 + v17695:0, v17695:0) :|: v17695:0 > -1 && v13894:0 > 1 && v13896:0 > 1 && sum~cons_1~v17695:0 = 1 + v17695:0 ---------------------------------------- (65) Obligation: Rules: f_1249(v13894:0, v13896:0, sum~cons_1~v17695:0) -> f_1249(v13894:0, 1 + v17695:0, v17695:0) :|: v17695:0 > -1 && v13894:0 > 1 && v13896:0 > 1 && sum~cons_1~v17695:0 = 1 + v17695:0 ---------------------------------------- (66) IRS2T2 (EQUIVALENT) Transformed input IRS into an integer transition system.Used the following mapping from defined symbols to location IDs: (f_1249_3,1) ---------------------------------------- (67) Obligation: START: 0; FROM: 0; TO: 1; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := oldX2 - 1; assume(oldX3 > -1 && oldX0 > 1 && oldX1 > 1 && oldX2 = 1 + oldX3); x0 := oldX0; x1 := 1 + oldX3; x2 := oldX2 - 1; TO: 1; ---------------------------------------- (68) T2 (EQUIVALENT) Initially, performed program simplifications using lexicographic rank functions: * Removed transitions 1, 3, 4 using the following rank functions: - Rank function 1: RF for loc. 5: 1+2*x2 RF for loc. 6: 2*x2 Bound for (chained) transitions 4: 2 - Rank function 2: RF for loc. 5: 2*x2 RF for loc. 6: -1+2*x2 Bound for (chained) transitions 3: 1 - Rank function 3: RF for loc. 5: 0 RF for loc. 6: -1 Bound for (chained) transitions 1: 0 ---------------------------------------- (69) YES ---------------------------------------- (70) Obligation: SCC ---------------------------------------- (71) SCC2IRS (SOUND) Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: Generated rules. Obtained 56 rulesP rules: f_1014(v9015, v9016, v9017, v9018, v9019, v9020, 1, v9022, v9023, v9024, v9025, v9027, v9028, v9029, v9030, 0, 3, 2, 4) -> f_1026(v9015, v9016, v9017, v9018, v9019, v9020, 1, v9022, v9023, v9024, v9025, v9221, v9027, v9028, v9029, v9030, 0, 3, 2, 4) :|: 1 + v9221 = v9020 && 0 <= v9221 f_1026(v9015, v9016, v9017, v9018, v9019, v9020, 1, v9022, v9023, v9024, v9025, v9221, v9027, v9028, v9029, v9030, 0, 3, 2, 4) -> f_1040(v9015, v9016, v9017, v9018, v9019, v9020, 1, v9022, v9023, v9024, v9025, v9221, v9027, v9028, v9029, v9030, 0, 3, 2, 4) :|: TRUE f_1040(v9015, v9016, v9017, v9018, v9019, v9020, 1, v9022, v9023, v9024, v9025, v9221, v9027, v9028, v9029, v9030, 0, 3, 2, 4) -> f_1053(v9015, v9016, v9017, v9018, v9019, v9020, 1, v9022, v9023, v9024, v9025, v9221, v9647, v9028, v9029, v9030, 0, 3, 2, 4) :|: TRUE f_1053(v9015, v9016, v9017, v9018, v9019, v9020, 1, v9022, v9023, v9024, v9025, v9221, v9647, v9028, v9029, v9030, 0, 3, 2, 4) -> f_1069(v9015, v9016, v9017, v9018, v9019, v9020, 1, v9022, v9023, v9024, v9025, v9221, v9647, v9028, v9029, v9030, 0, 3, 2, 4) :|: TRUE f_1069(v9015, v9016, v9017, v9018, v9019, v9020, 1, v9022, v9023, v9024, v9025, v9221, v9647, v9028, v9029, v9030, 0, 3, 2, 4) -> f_1082(v9015, v9016, v9017, v9018, v9019, v9020, 1, v9022, v9023, v9024, v9025, v9221, v9647, v9028, v9029, v9030, 0, 3, 2, 4) :|: TRUE f_1082(v9015, v9016, v9017, v9018, v9019, v9020, 1, v9022, v9023, v9024, v9025, v9221, v9647, v9028, v9029, v9030, 0, 3, 2, 4) -> f_1095(v9015, v9016, v9017, v9018, v9019, v9020, 1, v9022, v9023, v9024, v9025, v9221, v9647, v9028, v9029, v9030, 0, 3, 2, 4) :|: TRUE f_1095(v9015, v9016, v9017, v9018, v9019, v9020, 1, v9022, v9023, v9024, v9025, v9221, v9647, v9028, v9029, v9030, 0, 3, 2, 4) -> f_1109(v9015, v9016, v9017, v9018, v9019, v9020, 1, v9022, v9023, v9024, v9025, v9221, v9647, v9028, v9029, v9030, 0, 3, 2, 4) :|: TRUE f_1109(v9015, v9016, v9017, v9018, v9019, v9020, 1, v9022, v9023, v9024, v9025, v9221, v9647, v9028, v9029, v9030, 0, 3, 2, 4) -> f_1122(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9022, v9020, v9023, v9024, v9025, v9647, v9028, v9029, v9030, 0, 3, 2, 4) :|: 0 = 0 f_1122(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9022, v9020, v9023, v9024, v9025, v9647, v9028, v9029, v9030, 0, 3, 2, 4) -> f_1131(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9022, v9020, v9023, v9024, v9025, v9647, v9028, v9029, v9030, 0, 3, 2, 4) :|: v9221 != 0 && 2 <= v9020 && 3 <= v9018 f_1131(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9022, v9020, v9023, v9024, v9025, v9647, v9028, v9029, v9030, 0, 3, 2, 4) -> f_1141(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9022, v9020, v9023, v9024, v9025, v9647, v9028, v9029, v9030, 0, 3, 2, 4) :|: 0 = 0 f_1141(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9022, v9020, v9023, v9024, v9025, v9647, v9028, v9029, v9030, 0, 3, 2, 4) -> f_1152(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9022, v9020, v9023, v9024, v9025, v9647, v9028, v9029, v9030, 0, 3, 2, 4) :|: TRUE f_1152(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9022, v9020, v9023, v9024, v9025, v9647, v9028, v9029, v9030, 0, 3, 2, 4) -> f_1164(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9647, v9020, v9023, v9024, v9025, v9028, v9029, v9030, 0, 3, 2, 4) :|: 0 = 0 f_1164(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9647, v9020, v9023, v9024, v9025, v9028, v9029, v9030, 0, 3, 2, 4) -> f_1176(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9647, v9020, v9023, v9024, v9025, v9028, v9029, v9030, 0, 3, 2, 4) :|: 0 < v9647 f_1176(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9647, v9020, v9023, v9024, v9025, v9028, v9029, v9030, 0, 3, 2, 4) -> f_1189(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9647, v9020, v9023, v9024, v9025, v9028, v9029, v9030, 0, 3, 2, 4) :|: 0 = 0 f_1189(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9647, v9020, v9023, v9024, v9025, v9028, v9029, v9030, 0, 3, 2, 4) -> f_1201(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9647, v9020, v9023, v9024, v9025, v9028, v9029, v9030, 0, 3, 2, 4) :|: 0 = 0 f_1201(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9647, v9020, v9023, v9024, v9025, v9028, v9029, v9030, 0, 3, 2, 4) -> f_1212(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9647, v9020, v9023, v9024, v9025, v9028, v9029, v9030, 0, 3, 2, 4) :|: TRUE f_1212(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9647, v9020, v9023, v9024, v9025, v9028, v9029, v9030, 0, 3, 2, 4) -> f_1224(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9647, v9023, v9024, v9025, v9020, v9028, v9029, v9030, 0, 3, 2, 4) :|: 0 = 0 f_1224(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9647, v9023, v9024, v9025, v9020, v9028, v9029, v9030, 0, 3, 2, 4) -> f_1234(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9647, v9023, v9024, v9025, v9020, v9028, v9029, v9030, 0, 3, 2, 4) :|: 0 = 0 f_1234(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9647, v9023, v9024, v9025, v9020, v9028, v9029, v9030, 0, 3, 2, 4) -> f_1246(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9647, v9023, v9024, v9025, v9020, v9028, v9029, v9030, 0, 3, 2, 4) :|: TRUE f_1246(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9647, v9023, v9024, v9025, v9020, v9028, v9029, v9030, 0, 3, 2, 4) -> f_1257(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9647, v14170, v9024, v9025, v9020, v9028, v9029, v9030, 0, 3, 2, 4) :|: TRUE f_1257(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9647, v14170, v9024, v9025, v9020, v9028, v9029, v9030, 0, 3, 2, 4) -> f_1270(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9647, v14170, v9024, v9025, v9020, v9028, v9029, v9030, 0, 3, 2, 4) :|: v14170 != 0 f_1257(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9647, v14170, v9024, v9025, v9020, v9028, v9029, v9030, 0, 3, 2, 4) -> f_1271(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9647, 0, v9024, v9025, v9020, v9028, v9029, v9030, 3, 2, 4) :|: v14170 = 0 f_1270(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9647, v14170, v9024, v9025, v9020, v9028, v9029, v9030, 0, 3, 2, 4) -> f_1283(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9647, v14170, v9024, v9025, v9020, v9028, v9029, v9030, 0, 3, 2, 4) :|: 0 = 0 f_1283(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9647, v14170, v9024, v9025, v9020, v9028, v9029, v9030, 0, 3, 2, 4) -> f_1296(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9647, v14170, v9024, v9025, v9020, v9028, v9029, v9030, 0, 3, 2, 4) :|: TRUE f_1296(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9647, v14170, v9024, v9025, v9020, v9028, v9029, v9030, 0, 3, 2, 4) -> f_1002(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9647, v14170, v9024, v9025, v9020, v9647, v9028, v9029, v9030, 0, 3, 2, 4) :|: TRUE f_1002(v9015, v9016, v9017, v9018, v9019, v9020, 1, v9022, v9023, v9024, v9025, v9026, v9027, v9028, v9029, v9030, 0, 3, 2, 4) -> f_1014(v9015, v9016, v9017, v9018, v9019, v9020, 1, v9022, v9023, v9024, v9025, v9027, v9028, v9029, v9030, 0, 3, 2, 4) :|: 0 = 0 f_1271(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9647, 0, v9024, v9025, v9020, v9028, v9029, v9030, 3, 2, 4) -> f_1284(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9647, 0, v9024, v9025, v9020, v9028, v9029, v9030, 3, 2, 4) :|: 0 = 0 f_1284(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9647, 0, v9024, v9025, v9020, v9028, v9029, v9030, 3, 2, 4) -> f_1297(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9647, 0, v9024, v9025, v9020, v9028, v9029, v9030, 3, 2, 4) :|: TRUE f_1297(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9647, 0, v9024, v9025, v9020, v9028, v9029, v9030, 3, 2, 4) -> f_1004(v9015, v9016, v9017, v9018, v9019, v9221, 1, v9647, 0, v9024, v9025, v9020, v9647, v9028, v9029, v9030, 3, 2, 4) :|: TRUE f_1004(v9077, v9078, v9079, v9080, v9081, v9082, 1, v9084, 0, v9086, v9087, v9088, v9089, v9090, v9091, v9092, 3, 2, 4) -> f_1015(v9077, v9078, v9079, v9080, v9081, v9082, 1, v9084, 0, v9087, v9088, v9089, v9090, v9091, v9092, 3, 2, 4) :|: 0 = 0 f_1015(v9077, v9078, v9079, v9080, v9081, v9082, 1, v9084, 0, v9087, v9088, v9089, v9090, v9091, v9092, 3, 2, 4) -> f_1027(v9077, v9078, v9079, v9080, v9081, v9082, 1, v9084, 0, v9222, v9088, v9089, v9090, v9091, v9092, 3, 2, 4) :|: 1 + v9222 = v9084 && 0 <= v9222 f_1027(v9077, v9078, v9079, v9080, v9081, v9082, 1, v9084, 0, v9222, v9088, v9089, v9090, v9091, v9092, 3, 2, 4) -> f_1041(v9077, v9078, v9079, v9080, v9081, v9082, 1, v9084, 0, v9222, v9088, v9089, v9090, v9091, v9092, 3, 2, 4) :|: TRUE f_1041(v9077, v9078, v9079, v9080, v9081, v9082, 1, v9084, 0, v9222, v9088, v9089, v9090, v9091, v9092, 3, 2, 4) -> f_1054(v9077, v9078, v9079, v9080, v9081, v9082, 1, v9084, 0, v9222, v9088, v9089, v9090, v9091, v9092, 3, 2, 4) :|: TRUE f_1054(v9077, v9078, v9079, v9080, v9081, v9082, 1, v9084, 0, v9222, v9088, v9089, v9090, v9091, v9092, 3, 2, 4) -> f_1055(v9077, v9078, v9079, v9080, v9081, v9082, 1, v9084, 0, v9088, v9089, v9222, v9090, v9091, v9092, 3, 2, 4) :|: TRUE f_1055(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9691, 0, v9693, v9694, v9695, v9696, v9697, v9698, 3, 2, 4) -> f_1070(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9691, 0, v9693, v9694, v9695, v9696, v9697, v9698, 3, 2, 4) :|: TRUE f_1070(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9691, 0, v9693, v9694, v9695, v9696, v9697, v9698, 3, 2, 4) -> f_1083(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9691, 0, v9693, v9694, v9695, v9696, v9697, v9698, 3, 2, 4) :|: TRUE f_1083(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9691, 0, v9693, v9694, v9695, v9696, v9697, v9698, 3, 2, 4) -> f_1096(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9691, 0, v9693, v9694, v9695, v9696, v9697, v9698, 3, 2, 4) :|: 0 = 0 f_1096(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9691, 0, v9693, v9694, v9695, v9696, v9697, v9698, 3, 2, 4) -> f_1110(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9691, 0, v9693, v9694, v9695, v9696, v9697, v9698, 3, 2, 4) :|: 0 = 0 f_1110(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9691, 0, v9693, v9694, v9695, v9696, v9697, v9698, 3, 2, 4) -> f_1123(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9691, 0, v9693, v9694, v9695, v9696, v9697, v9698, 3, 2, 4) :|: TRUE f_1123(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9691, 0, v9693, v9694, v9695, v9696, v9697, v9698, 3, 2, 4) -> f_1133(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9695, 0, v9693, v9694, v9691, v9696, v9697, v9698, 3, 2, 4) :|: 0 = 0 f_1133(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9695, 0, v9693, v9694, v9691, v9696, v9697, v9698, 3, 2, 4) -> f_1143(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9695, 0, v9693, v9694, v9691, v9696, v9697, v9698, 3, 2, 4) :|: 0 < v9695 && 2 <= v9691 && 2 <= v9694 f_1143(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9695, 0, v9693, v9694, v9691, v9696, v9697, v9698, 3, 2, 4) -> f_1154(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9695, 0, v9693, v9694, v9691, v9696, v9697, v9698, 3, 2, 4) :|: 0 = 0 f_1154(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9695, 0, v9693, v9694, v9691, v9696, v9697, v9698, 3, 2, 4) -> f_1166(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9695, 0, v9693, v9694, v9691, v9696, v9697, v9698, 3, 2, 4) :|: 0 = 0 f_1166(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9695, 0, v9693, v9694, v9691, v9696, v9697, v9698, 3, 2, 4) -> f_1178(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9695, 0, v9693, v9694, v9691, v9696, v9697, v9698, 3, 2, 4) :|: TRUE f_1178(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9695, 0, v9693, v9694, v9691, v9696, v9697, v9698, 3, 2, 4) -> f_1191(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9695, 0, v9693, v9694, v9691, v9696, v9697, v9698, 3, 2, 4) :|: 0 = 0 f_1191(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9695, 0, v9693, v9694, v9691, v9696, v9697, v9698, 3, 2, 4) -> f_1203(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9695, 0, v9693, v9694, v9691, v9696, v9697, v9698, 3, 2, 4) :|: 0 = 0 f_1203(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9695, 0, v9693, v9694, v9691, v9696, v9697, v9698, 3, 2, 4) -> f_1214(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9695, 0, v9693, v9694, v9691, v9696, v9697, v9698, 3, 2, 4) :|: TRUE f_1214(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9695, 0, v9693, v9694, v9691, v9696, v9697, v9698, 3, 2, 4) -> f_1225(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9695, v13636, 0, v9693, v9694, v9691, v9696, v9697, v9698, 3, 2, 4) :|: TRUE f_1225(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9695, v13636, 0, v9693, v9694, v9691, v9696, v9697, v9698, 3, 2, 4) -> f_1235(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9695, v13636, 0, v9693, v9694, v9691, v9696, v9697, v9698, 3, 2, 4) :|: v13636 != 0 f_1225(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9695, v13636, 0, v9693, v9694, v9691, v9696, v9697, v9698, 3, 2, 4) -> f_1236(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9695, 0, v9693, v9694, v9691, v9696, v9697, v9698, 3, 2, 4) :|: v13636 = 0 f_1235(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9695, v13636, 0, v9693, v9694, v9691, v9696, v9697, v9698, 3, 2, 4) -> f_1247(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9695, v13636, v9693, v9694, v9691, v9696, v9697, v9698, 0, 3, 2, 4) :|: 0 = 0 f_1247(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9695, v13636, v9693, v9694, v9691, v9696, v9697, v9698, 0, 3, 2, 4) -> f_1258(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9695, v13636, v9693, v9694, v9691, v9696, v9697, v9698, 0, 3, 2, 4) :|: TRUE f_1258(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9695, v13636, v9693, v9694, v9691, v9696, v9697, v9698, 0, 3, 2, 4) -> f_1002(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9695, v13636, v9691, v9695, v9693, v9694, v9696, v9697, v9698, 0, 3, 2, 4) :|: TRUE f_1236(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9695, 0, v9693, v9694, v9691, v9696, v9697, v9698, 3, 2, 4) -> f_1248(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9695, 0, v9693, v9694, v9691, v9696, v9697, v9698, 3, 2, 4) :|: 0 = 0 f_1248(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9695, 0, v9693, v9694, v9691, v9696, v9697, v9698, 3, 2, 4) -> f_1259(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9695, 0, v9693, v9694, v9691, v9696, v9697, v9698, 3, 2, 4) :|: TRUE f_1259(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9695, 0, v9693, v9694, v9691, v9696, v9697, v9698, 3, 2, 4) -> f_1004(v9684, v9685, v9686, v9687, v9688, v9689, 1, v9695, 0, v9691, v9695, v9693, v9694, v9696, v9697, v9698, 3, 2, 4) :|: TRUE Combined rules. Obtained 6 rulesP rules: f_1225(v9684:0, v9685:0, v9686:0, v9687:0, v9688:0, v9689:0, 1, v9695:0, v13636:0, 0, v9693:0, v9694:0, v9691:0, v9696:0, v9697:0, v9698:0, 3, 2, 4) -> f_1014(v9684:0, v9685:0, v9686:0, v9687:0, v9688:0, v9689:0, 1, v9695:0, v13636:0, v9691:0, v9695:0, v9694:0, v9696:0, v9697:0, v9698:0, 0, 3, 2, 4) :|: v13636:0 < 0 f_1225(v9684:0, v9685:0, v9686:0, v9687:0, v9688:0, v9689:0, 1, v9695:0, v13636:0, 0, v9693:0, v9694:0, v9691:0, v9696:0, v9697:0, v9698:0, 3, 2, 4) -> f_1014(v9684:0, v9685:0, v9686:0, v9687:0, v9688:0, v9689:0, 1, v9695:0, v13636:0, v9691:0, v9695:0, v9694:0, v9696:0, v9697:0, v9698:0, 0, 3, 2, 4) :|: v13636:0 > 0 f_1225(v9684:0, v9685:0, v9686:0, v9687:0, v9688:0, v9689:0, 1, 1 + v9222:0, 0, 0, v9693:0, v9694:0, v9691:0, v9696:0, v9697:0, v9698:0, 3, 2, 4) -> f_1225(v9684:0, v9685:0, v9686:0, v9687:0, v9688:0, v9689:0, 1, v9222:0, v13636:1, 0, v9693:0, v9694:0, 1 + v9222:0, v9696:0, v9697:0, v9698:0, 3, 2, 4) :|: v9222:0 > 0 && v9694:0 > 1 f_1014(v9015:0, v9016:0, v9017:0, v9018:0, v9019:0, 1 + v9221:0, 1, v9022:0, v9023:0, v9024:0, v9025:0, v9027:0, v9028:0, v9029:0, v9030:0, 0, 3, 2, 4) -> f_1225(v9015:0, v9016:0, v9017:0, v9018:0, v9019:0, v9221:0, 1, v9222:0, v13636:0, 0, 1 + v9221:0, 1 + v9222:0, 1 + v9222:0, v9028:0, v9029:0, v9030:0, 3, 2, 4) :|: v9221:0 > 0 && v9222:0 > 0 && v9018:0 > 2 f_1014(v9015:0, v9016:0, v9017:0, v9018:0, v9019:0, 1 + v9221:0, 1, v9022:0, v9023:0, v9024:0, v9025:0, v9027:0, v9028:0, v9029:0, v9030:0, 0, 3, 2, 4) -> f_1014(v9015:0, v9016:0, v9017:0, v9018:0, v9019:0, v9221:0, 1, v9647:0, v14170:0, v9024:0, v9025:0, v9647:0, v9028:0, v9029:0, v9030:0, 0, 3, 2, 4) :|: v9221:0 > 0 && v9018:0 > 2 && v14170:0 < 0 && v9647:0 > 0 f_1014(v9015:0, v9016:0, v9017:0, v9018:0, v9019:0, 1 + v9221:0, 1, v9022:0, v9023:0, v9024:0, v9025:0, v9027:0, v9028:0, v9029:0, v9030:0, 0, 3, 2, 4) -> f_1014(v9015:0, v9016:0, v9017:0, v9018:0, v9019:0, v9221:0, 1, v9647:0, v14170:0, v9024:0, v9025:0, v9647:0, v9028:0, v9029:0, v9030:0, 0, 3, 2, 4) :|: v9221:0 > 0 && v9018:0 > 2 && v14170:0 > 0 && v9647:0 > 0 Filtered unneeded arguments: f_1225(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19) -> f_1225(x4, x6, x8, x9, x12) f_1014(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19) -> f_1014(x4, x6) Removed division, modulo operations, cleaned up constraints. Obtained 5 rules.P rules: f_1225(v9687:0, v9689:0, v9695:0, v13636:0, v9694:0) -> f_1014(v9687:0, v9689:0) :|: v13636:0 < 0 f_1225(v9687:0, v9689:0, v9695:0, v13636:0, v9694:0) -> f_1014(v9687:0, v9689:0) :|: v13636:0 > 0 f_1225(v9687:0, v9689:0, sum~cons_1~v9222:0, cons_0, v9694:0) -> f_1225(v9687:0, v9689:0, v9222:0, v13636:1, v9694:0) :|: v9222:0 > 0 && v9694:0 > 1 && sum~cons_1~v9222:0 = 1 + v9222:0 && cons_0 = 0 f_1014(v9018:0, sum~cons_1~v9221:0) -> f_1225(v9018:0, v9221:0, v9222:0, v13636:0, 1 + v9222:0) :|: v9222:0 > 0 && v9018:0 > 2 && v9221:0 > 0 && sum~cons_1~v9221:0 = 1 + v9221:0 f_1014(v9018:0, sum~cons_1~v9221:0) -> f_1014(v9018:0, v9221:0) :|: v9221:0 > 0 && v9018:0 > 2 && sum~cons_1~v9221:0 = 1 + v9221:0 ---------------------------------------- (72) Obligation: Rules: f_1225(v9687:0, v9689:0, v9695:0, v13636:0, v9694:0) -> f_1014(v9687:0, v9689:0) :|: v13636:0 < 0 f_1225(x, x1, x2, x3, x4) -> f_1014(x, x1) :|: x3 > 0 f_1225(x5, x6, x7, x8, x9) -> f_1225(x5, x6, x10, x11, x9) :|: x10 > 0 && x9 > 1 && x7 = 1 + x10 && x8 = 0 f_1014(x12, x13) -> f_1225(x12, x14, x15, x16, 1 + x15) :|: x15 > 0 && x12 > 2 && x14 > 0 && x13 = 1 + x14 f_1014(v9018:0, sum~cons_1~v9221:0) -> f_1014(v9018:0, v9221:0) :|: v9221:0 > 0 && v9018:0 > 2 && sum~cons_1~v9221:0 = 1 + v9221:0 ---------------------------------------- (73) IRS2T2 (EQUIVALENT) Transformed input IRS into an integer transition system.Used the following mapping from defined symbols to location IDs: (f_1225_5,1) (f_1014_5,2) ---------------------------------------- (74) Obligation: START: 0; FROM: 0; TO: 1; FROM: 0; TO: 2; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := x4; oldX5 := nondet(); oldX6 := nondet(); oldX7 := nondet(); assume(oldX3 < 0); x0 := oldX0; x1 := oldX1; x2 := oldX5; x3 := oldX6; x4 := oldX7; TO: 2; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := x4; oldX5 := nondet(); oldX6 := nondet(); oldX7 := nondet(); assume(oldX3 > 0); x0 := oldX0; x1 := oldX1; x2 := oldX5; x3 := oldX6; x4 := oldX7; TO: 2; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := x4; oldX5 := oldX2 - 1; oldX6 := nondet(); assume(oldX5 > 0 && oldX4 > 1 && oldX2 = 1 + oldX5 && oldX3 = 0); x0 := oldX0; x1 := oldX1; x2 := oldX2 - 1; x3 := oldX6; x4 := oldX4; TO: 1; FROM: 2; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := x4; oldX5 := oldX1 - 1; oldX6 := nondet(); oldX7 := nondet(); assume(oldX6 > 0 && oldX0 > 2 && oldX5 > 0 && oldX1 = 1 + oldX5); x0 := oldX0; x1 := oldX1 - 1; x2 := oldX6; x3 := oldX7; x4 := 1 + oldX6; TO: 1; FROM: 2; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := x4; oldX5 := oldX1 - 1; oldX6 := nondet(); oldX7 := nondet(); oldX8 := nondet(); assume(oldX5 > 0 && oldX0 > 2 && oldX1 = 1 + oldX5); x0 := oldX0; x1 := oldX1 - 1; x2 := oldX6; x3 := oldX7; x4 := oldX8; TO: 2; ---------------------------------------- (75) T2 (EQUIVALENT) Initially, performed program simplifications using lexicographic rank functions: * Removed transitions 2, 5, 6, 7, 17, 20, 21 using the following rank functions: - Rank function 1: RF for loc. 6: 2+3*x1 RF for loc. 7: 1+3*x1 RF for loc. 8: 2+3*x1 RF for loc. 12: 3*x1 Bound for (chained) transitions 20: 6 Bound for (chained) transitions 21: 6 - Rank function 2: RF for loc. 6: 0 RF for loc. 7: -1 RF for loc. 8: 0 RF for loc. 12: -2 Bound for (chained) transitions 5: 0 Bound for (chained) transitions 17: -1 - Rank function 3: RF for loc. 6: 1+2*x2 RF for loc. 7: -1+2*x2 RF for loc. 8: 2*x2 Bound for (chained) transitions 7: 4 - Rank function 4: RF for loc. 6: 0 RF for loc. 7: -2*oldX3 RF for loc. 8: -1 Bound for (chained) transitions 2: 0 Bound for (chained) transitions 6: -1 ---------------------------------------- (76) YES ---------------------------------------- (77) Obligation: SCC ---------------------------------------- (78) SCC2IRS (SOUND) Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: Generated rules. Obtained 26 rulesP rules: f_642(v2154, v2155, v2156, v2157, v2158, v2159, 1, v2161, 0, v2163, v2164, v2165, v2166, v2167, 3, 4) -> f_647(v2154, v2155, v2156, v2157, v2158, v2159, 1, v2161, 0, v2163, v2164, v2165, v2166, v2167, 3, 4) :|: TRUE f_647(v2154, v2155, v2156, v2157, v2158, v2159, 1, v2161, 0, v2163, v2164, v2165, v2166, v2167, 3, 4) -> f_652(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2161, v2159, 0, v2163, v2165, v2166, v2167, 3, 4) :|: 0 = 0 f_652(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2161, v2159, 0, v2163, v2165, v2166, v2167, 3, 4) -> f_658(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2161, v2159, 0, v2163, v2165, v2166, v2167, 3, 4) :|: v2164 != 0 f_658(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2161, v2159, 0, v2163, v2165, v2166, v2167, 3, 4) -> f_666(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2161, v2159, 0, v2163, v2165, v2166, v2167, 3, 4) :|: 0 = 0 f_666(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2161, v2159, 0, v2163, v2165, v2166, v2167, 3, 4) -> f_674(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2161, v2159, 0, v2163, v2165, v2166, v2167, 3, 4) :|: TRUE f_674(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2161, v2159, 0, v2163, v2165, v2166, v2167, 3, 4) -> f_682(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, v2159, 0, v2161, v2165, v2166, v2167, 3, 4) :|: 0 = 0 f_682(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, v2159, 0, v2161, v2165, v2166, v2167, 3, 4) -> f_692(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, v2159, 0, v2161, v2165, v2166, v2167, 3, 2, 4) :|: 0 < v2163 && 2 <= v2161 && 2 <= v2158 f_692(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, v2159, 0, v2161, v2165, v2166, v2167, 3, 2, 4) -> f_702(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, v2159, 0, v2161, v2165, v2166, v2167, 3, 2, 4) :|: 0 = 0 f_702(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, v2159, 0, v2161, v2165, v2166, v2167, 3, 2, 4) -> f_711(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, v2159, 0, v2161, v2165, v2166, v2167, 3, 2, 4) :|: 0 = 0 f_711(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, v2159, 0, v2161, v2165, v2166, v2167, 3, 2, 4) -> f_720(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, v2159, 0, v2161, v2165, v2166, v2167, 3, 2, 4) :|: TRUE f_720(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, v2159, 0, v2161, v2165, v2166, v2167, 3, 2, 4) -> f_729(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, 0, v2161, v2165, v2166, v2167, 3, 2, 4) :|: 0 = 0 f_729(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, 0, v2161, v2165, v2166, v2167, 3, 2, 4) -> f_738(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, 0, v2161, v2165, v2166, v2167, 3, 2, 4) :|: v2164 <= 0 f_738(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, 0, v2161, v2165, v2166, v2167, 3, 2, 4) -> f_747(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, 0, v2161, v2165, v2166, v2167, 3, 2, 4) :|: 0 = 0 f_747(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, 0, v2161, v2165, v2166, v2167, 3, 2, 4) -> f_756(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, 0, v2161, v2165, v2166, v2167, 3, 2, 4) :|: TRUE f_756(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, 0, v2161, v2165, v2166, v2167, 3, 2, 4) -> f_764(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, 0, v2896, v2161, v2165, v2166, v2167, 3, 2, 4) :|: TRUE f_764(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, 0, v2896, v2161, v2165, v2166, v2167, 3, 2, 4) -> f_775(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, 0, v2161, v2165, v2166, v2167, 3, 2, 4) :|: v2896 = 0 f_775(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, 0, v2161, v2165, v2166, v2167, 3, 2, 4) -> f_786(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, 0, v2161, v2165, v2166, v2167, 3, 2, 4) :|: 0 = 0 f_786(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, 0, v2161, v2165, v2166, v2167, 3, 2, 4) -> f_797(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, 0, v2161, v2165, v2166, v2167, 3, 2, 4) :|: TRUE f_797(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, 0, v2161, v2165, v2166, v2167, 3, 2, 4) -> f_809(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, 0, v2165, v2166, v2167, 3, 2, 4) :|: 0 = 0 f_809(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, 0, v2165, v2166, v2167, 3, 2, 4) -> f_822(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, 0, v3556, v2165, v2166, v2167, 3, 2, 4) :|: 1 + v3556 = v2163 && 0 <= v3556 f_822(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, 0, v3556, v2165, v2166, v2167, 3, 2, 4) -> f_835(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, 0, v3556, v2165, v2166, v2167, 3, 2, 4) :|: TRUE f_835(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, 0, v3556, v2165, v2166, v2167, 3, 2, 4) -> f_846(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, 0, v3556, v4459, v2165, v2166, v2167, 3, 2, 4) :|: TRUE f_846(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, 0, v3556, v4459, v2165, v2166, v2167, 3, 2, 4) -> f_857(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, 0, v3556, v4459, v2165, v2166, v2167, 3, 2, 4) :|: TRUE f_857(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, 0, v3556, v4459, v2165, v2166, v2167, 3, 2, 4) -> f_866(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, 0, v3556, v4459, v2165, v2166, v2167, 3, 2, 4) :|: TRUE f_866(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, 0, v3556, v4459, v2165, v2166, v2167, 3, 2, 4) -> f_638(v2154, v2155, v2156, v2157, v2158, v2164, 1, v2163, 0, v3556, v4459, v2165, v2166, v2167, 3, 4) :|: TRUE f_638(v2154, v2155, v2156, v2157, v2158, v2159, 1, v2161, 0, v2163, v2164, v2165, v2166, v2167, 3, 4) -> f_642(v2154, v2155, v2156, v2157, v2158, v2159, 1, v2161, 0, v2163, v2164, v2165, v2166, v2167, 3, 4) :|: TRUE Combined rules. Obtained 2 rulesP rules: f_642(v2154:0, v2155:0, v2156:0, v2157:0, v2158:0, v2159:0, 1, v2161:0, 0, 1 + v3556:0, v2164:0, v2165:0, v2166:0, v2167:0, 3, 4) -> f_642(v2154:0, v2155:0, v2156:0, v2157:0, v2158:0, v2164:0, 1, 1 + v3556:0, 0, v3556:0, v4459:0, v2165:0, v2166:0, v2167:0, 3, 4) :|: v2164:0 < 0 && v2161:0 > 1 && v3556:0 > -1 && v2158:0 > 1 && v2164:0 < 1 f_642(v2154:0, v2155:0, v2156:0, v2157:0, v2158:0, v2159:0, 1, v2161:0, 0, 1 + v3556:0, v2164:0, v2165:0, v2166:0, v2167:0, 3, 4) -> f_642(v2154:0, v2155:0, v2156:0, v2157:0, v2158:0, v2164:0, 1, 1 + v3556:0, 0, v3556:0, v4459:0, v2165:0, v2166:0, v2167:0, 3, 4) :|: v2164:0 > 0 && v2161:0 > 1 && v3556:0 > -1 && v2158:0 > 1 && v2164:0 < 1 Filtered unneeded arguments: f_642(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16) -> f_642(x5, x8, x10, x11) Removed division, modulo operations, cleaned up constraints. Obtained 2 rules.P rules: f_642(v2158:0, v2161:0, sum~cons_1~v3556:0, v2164:0) -> f_642(v2158:0, 1 + v3556:0, v3556:0, v4459:0) :|: v2161:0 > 1 && v2164:0 < 0 && v3556:0 > -1 && v2164:0 < 1 && v2158:0 > 1 && sum~cons_1~v3556:0 = 1 + v3556:0 f_642(v2158:0, v2161:0, sum~cons_1~v3556:0, v2164:0) -> f_642(v2158:0, 1 + v3556:0, v3556:0, v4459:0) :|: v2161:0 > 1 && v2164:0 > 0 && v3556:0 > -1 && v2164:0 < 1 && v2158:0 > 1 && sum~cons_1~v3556:0 = 1 + v3556:0 ---------------------------------------- (79) Obligation: Rules: f_642(v2158:0, v2161:0, sum~cons_1~v3556:0, v2164:0) -> f_642(v2158:0, 1 + v3556:0, v3556:0, v4459:0) :|: v2161:0 > 1 && v2164:0 < 0 && v3556:0 > -1 && v2164:0 < 1 && v2158:0 > 1 && sum~cons_1~v3556:0 = 1 + v3556:0 f_642(x, x1, x2, x3) -> f_642(x, 1 + x4, x4, x5) :|: x1 > 1 && x3 > 0 && x4 > -1 && x3 < 1 && x > 1 && x2 = 1 + x4 ---------------------------------------- (80) IRS2T2 (EQUIVALENT) Transformed input IRS into an integer transition system.Used the following mapping from defined symbols to location IDs: (f_642_4,1) ---------------------------------------- (81) Obligation: START: 0; FROM: 0; TO: 1; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := oldX2 - 1; oldX5 := nondet(); assume(oldX1 > 1 && oldX3 < 0 && oldX4 > -1 && oldX3 < 1 && oldX0 > 1 && oldX2 = 1 + oldX4); x0 := oldX0; x1 := 1 + oldX4; x2 := oldX2 - 1; x3 := oldX5; TO: 1; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := oldX2 - 1; oldX5 := nondet(); assume(oldX1 > 1 && oldX3 > 0 && oldX4 > -1 && oldX3 < 1 && oldX0 > 1 && oldX2 = 1 + oldX4); x0 := oldX0; x1 := 1 + oldX4; x2 := oldX2 - 1; x3 := oldX5; TO: 1; ---------------------------------------- (82) T2 (EQUIVALENT) Initially, performed program simplifications using lexicographic rank functions: * Removed transitions 1, 4, 5 using the following rank functions: - Rank function 1: RF for loc. 5: 1+2*x2 RF for loc. 6: 2*x2 Bound for (chained) transitions 4: 2 Bound for (chained) transitions 5: 2 - Rank function 2: RF for loc. 5: 0 RF for loc. 6: -1 Bound for (chained) transitions 1: 0 ---------------------------------------- (83) YES ---------------------------------------- (84) Obligation: SCC ---------------------------------------- (85) SCC2IRS (SOUND) Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: Generated rules. Obtained 25 rulesP rules: f_621(v1819, v1820, v1821, v1822, v1823, v1824, 1, v1826, v1827, v1828, v1829, v1830, v1831, v1832, 0, 3, 4) -> f_630(v1819, v1820, v1821, v1822, v1823, v1824, 1, v1826, v1827, v1828, v1829, v1830, v1831, v1832, 0, 3, 4) :|: TRUE f_630(v1819, v1820, v1821, v1822, v1823, v1824, 1, v1826, v1827, v1828, v1829, v1830, v1831, v1832, 0, 3, 4) -> f_639(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1826, v1824, v1827, v1829, v1830, v1831, v1832, 0, 3, 4) :|: 0 = 0 f_639(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1826, v1824, v1827, v1829, v1830, v1831, v1832, 0, 3, 4) -> f_643(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1826, v1824, v1827, v1829, v1830, v1831, v1832, 0, 3, 2, 4) :|: v1828 != 0 && 2 <= v1824 && 2 <= v1822 f_643(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1826, v1824, v1827, v1829, v1830, v1831, v1832, 0, 3, 2, 4) -> f_648(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1826, v1824, v1827, v1829, v1830, v1831, v1832, 0, 3, 2, 4) :|: 0 = 0 f_648(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1826, v1824, v1827, v1829, v1830, v1831, v1832, 0, 3, 2, 4) -> f_653(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1826, v1824, v1827, v1829, v1830, v1831, v1832, 0, 3, 2, 4) :|: TRUE f_653(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1826, v1824, v1827, v1829, v1830, v1831, v1832, 0, 3, 2, 4) -> f_660(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1829, v1824, v1827, v1830, v1831, v1832, 0, 3, 2, 4) :|: 0 = 0 f_660(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1829, v1824, v1827, v1830, v1831, v1832, 0, 3, 2, 4) -> f_668(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1829, v1824, v1827, v1830, v1831, v1832, 0, 3, 2, 4) :|: 0 < v1829 f_668(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1829, v1824, v1827, v1830, v1831, v1832, 0, 3, 2, 4) -> f_676(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1829, v1824, v1827, v1830, v1831, v1832, 0, 3, 2, 4) :|: 0 = 0 f_676(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1829, v1824, v1827, v1830, v1831, v1832, 0, 3, 2, 4) -> f_684(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1829, v1824, v1827, v1830, v1831, v1832, 0, 3, 2, 4) :|: 0 = 0 f_684(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1829, v1824, v1827, v1830, v1831, v1832, 0, 3, 2, 4) -> f_694(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1829, v1824, v1827, v1830, v1831, v1832, 0, 3, 2, 4) :|: TRUE f_694(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1829, v1824, v1827, v1830, v1831, v1832, 0, 3, 2, 4) -> f_704(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1829, v1827, v1824, v1830, v1831, v1832, 0, 3, 2, 4) :|: 0 = 0 f_704(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1829, v1827, v1824, v1830, v1831, v1832, 0, 3, 2, 4) -> f_713(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1829, v1827, v1824, v1830, v1831, v1832, 0, 3, 2, 4) :|: 0 = 0 f_713(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1829, v1827, v1824, v1830, v1831, v1832, 0, 3, 2, 4) -> f_722(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1829, v1827, v1824, v1830, v1831, v1832, 0, 3, 2, 4) :|: TRUE f_722(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1829, v1827, v1824, v1830, v1831, v1832, 0, 3, 2, 4) -> f_730(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1829, v2568, v1824, v1830, v1831, v1832, 0, 3, 2, 4) :|: TRUE f_730(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1829, v2568, v1824, v1830, v1831, v1832, 0, 3, 2, 4) -> f_739(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1829, v2568, v1824, v1830, v1831, v1832, 0, 3, 2, 4) :|: v2568 != 0 f_739(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1829, v2568, v1824, v1830, v1831, v1832, 0, 3, 2, 4) -> f_748(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1829, v2568, v1824, v1830, v1831, v1832, 0, 3, 2, 4) :|: 0 = 0 f_748(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1829, v2568, v1824, v1830, v1831, v1832, 0, 3, 2, 4) -> f_757(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1829, v2568, v1824, v1830, v1831, v1832, 0, 3, 2, 4) :|: TRUE f_757(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1829, v2568, v1824, v1830, v1831, v1832, 0, 3, 2, 4) -> f_765(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1829, v2568, v1830, v1831, v1832, 0, 3, 2, 4) :|: 0 = 0 f_765(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1829, v2568, v1830, v1831, v1832, 0, 3, 2, 4) -> f_776(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1829, v2568, v3008, v1830, v1831, v1832, 0, 3, 2, 4) :|: 1 + v3008 = v1828 && 0 <= v3008 f_776(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1829, v2568, v3008, v1830, v1831, v1832, 0, 3, 2, 4) -> f_787(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1829, v2568, v3008, v1830, v1831, v1832, 0, 3, 2, 4) :|: TRUE f_787(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1829, v2568, v3008, v1830, v1831, v1832, 0, 3, 2, 4) -> f_798(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1829, v2568, v3008, v3318, v1830, v1831, v1832, 0, 3, 2, 4) :|: TRUE f_798(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1829, v2568, v3008, v3318, v1830, v1831, v1832, 0, 3, 2, 4) -> f_810(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1829, v2568, v3008, v3318, v1830, v1831, v1832, 0, 3, 2, 4) :|: TRUE f_810(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1829, v2568, v3008, v3318, v1830, v1831, v1832, 0, 3, 2, 4) -> f_823(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1829, v2568, v3008, v3318, v1830, v1831, v1832, 0, 3, 2, 4) :|: TRUE f_823(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1829, v2568, v3008, v3318, v1830, v1831, v1832, 0, 3, 2, 4) -> f_612(v1819, v1820, v1821, v1822, v1823, v1828, 1, v1829, v2568, v3008, v3318, v1830, v1831, v1832, 0, 3, 4) :|: TRUE f_612(v1819, v1820, v1821, v1822, v1823, v1824, 1, v1826, v1827, v1828, v1829, v1830, v1831, v1832, 0, 3, 4) -> f_621(v1819, v1820, v1821, v1822, v1823, v1824, 1, v1826, v1827, v1828, v1829, v1830, v1831, v1832, 0, 3, 4) :|: TRUE Combined rules. Obtained 2 rulesP rules: f_621(v1819:0, v1820:0, v1821:0, v1822:0, v1823:0, v1824:0, 1, v1826:0, v1827:0, 1 + v3008:0, v1829:0, v1830:0, v1831:0, v1832:0, 0, 3, 4) -> f_621(v1819:0, v1820:0, v1821:0, v1822:0, v1823:0, 1 + v3008:0, 1, v1829:0, v2568:0, v3008:0, v3318:0, v1830:0, v1831:0, v1832:0, 0, 3, 4) :|: v1824:0 > 1 && v3008:0 > -1 && v1822:0 > 1 && v1829:0 > 0 && v2568:0 < 0 f_621(v1819:0, v1820:0, v1821:0, v1822:0, v1823:0, v1824:0, 1, v1826:0, v1827:0, 1 + v3008:0, v1829:0, v1830:0, v1831:0, v1832:0, 0, 3, 4) -> f_621(v1819:0, v1820:0, v1821:0, v1822:0, v1823:0, 1 + v3008:0, 1, v1829:0, v2568:0, v3008:0, v3318:0, v1830:0, v1831:0, v1832:0, 0, 3, 4) :|: v1824:0 > 1 && v3008:0 > -1 && v1822:0 > 1 && v1829:0 > 0 && v2568:0 > 0 Filtered unneeded arguments: f_621(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17) -> f_621(x4, x6, x10, x11) Removed division, modulo operations, cleaned up constraints. Obtained 1 rules.P rules: f_621(v1822:0, v1824:0, sum~cons_1~v3008:0, v1829:0) -> f_621(v1822:0, 1 + v3008:0, v3008:0, v3318:0) :|: v3008:0 > -1 && v1824:0 > 1 && v1829:0 > 0 && v1822:0 > 1 && sum~cons_1~v3008:0 = 1 + v3008:0 ---------------------------------------- (86) Obligation: Rules: f_621(v1822:0, v1824:0, sum~cons_1~v3008:0, v1829:0) -> f_621(v1822:0, 1 + v3008:0, v3008:0, v3318:0) :|: v3008:0 > -1 && v1824:0 > 1 && v1829:0 > 0 && v1822:0 > 1 && sum~cons_1~v3008:0 = 1 + v3008:0 ---------------------------------------- (87) IRS2T2 (EQUIVALENT) Transformed input IRS into an integer transition system.Used the following mapping from defined symbols to location IDs: (f_621_4,1) ---------------------------------------- (88) Obligation: START: 0; FROM: 0; TO: 1; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := oldX2 - 1; oldX5 := nondet(); assume(oldX4 > -1 && oldX1 > 1 && oldX3 > 0 && oldX0 > 1 && oldX2 = 1 + oldX4); x0 := oldX0; x1 := 1 + oldX4; x2 := oldX2 - 1; x3 := oldX5; TO: 1; ---------------------------------------- (89) T2 (EQUIVALENT) Initially, performed program simplifications using lexicographic rank functions: * Removed transitions 1, 3, 4 using the following rank functions: - Rank function 1: RF for loc. 5: 1+2*x2 RF for loc. 6: 2*x2 Bound for (chained) transitions 3: 2 Bound for (chained) transitions 4: 2 - Rank function 2: RF for loc. 5: 1 RF for loc. 6: 0 Bound for (chained) transitions 1: 1 ---------------------------------------- (90) YES ---------------------------------------- (91) Obligation: SCC ---------------------------------------- (92) SCC2IRS (SOUND) Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: Generated rules. Obtained 23 rulesP rules: f_579(v1706, v1707, v1708, v1709, v1710, v1711, 1, 0, v1714, v1715, v1716, v1717, v1718, 3, 4) -> f_587(v1706, v1707, v1708, v1709, v1710, v1715, 1, v1711, 0, v1714, v1716, v1717, v1718, 3, 4) :|: 0 = 0 f_587(v1706, v1707, v1708, v1709, v1710, v1715, 1, v1711, 0, v1714, v1716, v1717, v1718, 3, 4) -> f_595(v1706, v1707, v1708, v1709, v1710, v1715, 1, v1711, 0, v1714, v1716, v1717, v1718, 3, 4) :|: v1715 != 0 f_595(v1706, v1707, v1708, v1709, v1710, v1715, 1, v1711, 0, v1714, v1716, v1717, v1718, 3, 4) -> f_605(v1706, v1707, v1708, v1709, v1710, v1715, 1, v1711, 0, v1714, v1716, v1717, v1718, 3, 4) :|: 0 = 0 f_605(v1706, v1707, v1708, v1709, v1710, v1715, 1, v1711, 0, v1714, v1716, v1717, v1718, 3, 4) -> f_615(v1706, v1707, v1708, v1709, v1710, v1715, 1, v1711, 0, v1714, v1716, v1717, v1718, 3, 4) :|: TRUE f_615(v1706, v1707, v1708, v1709, v1710, v1715, 1, v1711, 0, v1714, v1716, v1717, v1718, 3, 4) -> f_624(v1706, v1707, v1708, v1709, v1710, v1715, 1, v1711, 0, v1714, v1716, v1717, v1718, 3, 4) :|: 0 = 0 f_624(v1706, v1707, v1708, v1709, v1710, v1715, 1, v1711, 0, v1714, v1716, v1717, v1718, 3, 4) -> f_633(v1706, v1707, v1708, v1709, v1710, v1715, 1, v1711, 0, v1714, v1716, v1717, v1718, 3, 4) :|: 0 = 0 f_633(v1706, v1707, v1708, v1709, v1710, v1715, 1, v1711, 0, v1714, v1716, v1717, v1718, 3, 4) -> f_641(v1706, v1707, v1708, v1709, v1710, v1715, 1, v1711, 0, v1714, v1716, v1717, v1718, 3, 4) :|: 0 = 0 f_641(v1706, v1707, v1708, v1709, v1710, v1715, 1, v1711, 0, v1714, v1716, v1717, v1718, 3, 4) -> f_646(v1706, v1707, v1708, v1709, v1710, v1715, 1, v1711, 0, v1714, v1716, v1717, v1718, 3, 4) :|: TRUE f_646(v1706, v1707, v1708, v1709, v1710, v1715, 1, v1711, 0, v1714, v1716, v1717, v1718, 3, 4) -> f_651(v1706, v1707, v1708, v1709, v1710, v1715, 1, 0, v1714, v1711, v1716, v1717, v1718, 3, 4) :|: 0 = 0 f_651(v1706, v1707, v1708, v1709, v1710, v1715, 1, 0, v1714, v1711, v1716, v1717, v1718, 3, 4) -> f_657(v1706, v1707, v1708, v1709, v1710, v1715, 1, 0, v1714, v1711, v1716, v1717, v1718, 3, 4) :|: v1715 <= 0 && 1 + v1711 <= 0 && 1 + v1709 <= 0 f_657(v1706, v1707, v1708, v1709, v1710, v1715, 1, 0, v1714, v1711, v1716, v1717, v1718, 3, 4) -> f_665(v1706, v1707, v1708, v1709, v1710, v1715, 1, 0, v1714, v1711, v1716, v1717, v1718, 3, 4) :|: 0 = 0 f_665(v1706, v1707, v1708, v1709, v1710, v1715, 1, 0, v1714, v1711, v1716, v1717, v1718, 3, 4) -> f_673(v1706, v1707, v1708, v1709, v1710, v1715, 1, 0, v1714, v1711, v1716, v1717, v1718, 3, 4) :|: TRUE f_673(v1706, v1707, v1708, v1709, v1710, v1715, 1, 0, v1714, v1711, v1716, v1717, v1718, 3, 4) -> f_681(v1706, v1707, v1708, v1709, v1710, v1715, 1, 0, v2305, v1711, v1716, v1717, v1718, 3, 4) :|: TRUE f_681(v1706, v1707, v1708, v1709, v1710, v1715, 1, 0, v2305, v1711, v1716, v1717, v1718, 3, 4) -> f_690(v1706, v1707, v1708, v1709, v1710, v1715, 1, 0, v2305, v1711, v1716, v1717, v1718, 3, 4) :|: v2305 != 0 f_690(v1706, v1707, v1708, v1709, v1710, v1715, 1, 0, v2305, v1711, v1716, v1717, v1718, 3, 4) -> f_700(v1706, v1707, v1708, v1709, v1710, v1715, 1, 0, v2305, v1711, v1716, v1717, v1718, 3, 4) :|: 0 = 0 f_700(v1706, v1707, v1708, v1709, v1710, v1715, 1, 0, v2305, v1711, v1716, v1717, v1718, 3, 4) -> f_709(v1706, v1707, v1708, v1709, v1710, v1715, 1, 0, v2305, v1711, v1716, v1717, v1718, 3, 4) :|: TRUE f_709(v1706, v1707, v1708, v1709, v1710, v1715, 1, 0, v2305, v1711, v1716, v1717, v1718, 3, 4) -> f_718(v1706, v1707, v1708, v1709, v1710, v1715, 1, 0, v2305, v1716, v1717, v1718, 3, 4) :|: 0 = 0 f_718(v1706, v1707, v1708, v1709, v1710, v1715, 1, 0, v2305, v1716, v1717, v1718, 3, 4) -> f_727(v1706, v1707, v1708, v1709, v1710, v1715, 1, 0, v2305, v2566, v1716, v1717, v1718, 3, 4) :|: v2566 = 1 + v1715 && v2566 <= 1 f_727(v1706, v1707, v1708, v1709, v1710, v1715, 1, 0, v2305, v2566, v1716, v1717, v1718, 3, 4) -> f_735(v1706, v1707, v1708, v1709, v1710, v1715, 1, 0, v2305, v2566, v1716, v1717, v1718, 3, 4) :|: TRUE f_735(v1706, v1707, v1708, v1709, v1710, v1715, 1, 0, v2305, v2566, v1716, v1717, v1718, 3, 4) -> f_744(v1706, v1707, v1708, v1709, v1710, v1715, 1, 0, v2305, v2566, v1716, v1717, v1718, 3, 4) :|: TRUE f_744(v1706, v1707, v1708, v1709, v1710, v1715, 1, 0, v2305, v2566, v1716, v1717, v1718, 3, 4) -> f_753(v1706, v1707, v1708, v1709, v1710, v1715, 1, 0, v2305, v2566, v1716, v1717, v1718, 3, 4) :|: TRUE f_753(v1706, v1707, v1708, v1709, v1710, v1715, 1, 0, v2305, v2566, v1716, v1717, v1718, 3, 4) -> f_571(v1706, v1707, v1708, v1709, v1710, v1715, 1, 0, v2305, v2566, v1716, v1717, v1718, 3, 4) :|: TRUE f_571(v1706, v1707, v1708, v1709, v1710, v1711, 1, 0, v1714, v1715, v1716, v1717, v1718, 3, 4) -> f_579(v1706, v1707, v1708, v1709, v1710, v1711, 1, 0, v1714, v1715, v1716, v1717, v1718, 3, 4) :|: TRUE Combined rules. Obtained 4 rulesP rules: f_579(v1706:0, v1707:0, v1708:0, v1709:0, v1710:0, v1711:0, 1, 0, v1714:0, v1715:0, v1716:0, v1717:0, v1718:0, 3, 4) -> f_579(v1706:0, v1707:0, v1708:0, v1709:0, v1710:0, v1715:0, 1, 0, v2305:0, 1 + v1715:0, v1716:0, v1717:0, v1718:0, 3, 4) :|: v1715:0 < 0 && v1711:0 < 0 && v1715:0 < 1 && v1709:0 < 0 && v2305:0 < 0 f_579(v1706:0, v1707:0, v1708:0, v1709:0, v1710:0, v1711:0, 1, 0, v1714:0, v1715:0, v1716:0, v1717:0, v1718:0, 3, 4) -> f_579(v1706:0, v1707:0, v1708:0, v1709:0, v1710:0, v1715:0, 1, 0, v2305:0, 1 + v1715:0, v1716:0, v1717:0, v1718:0, 3, 4) :|: v1715:0 < 0 && v1711:0 < 0 && v1715:0 < 1 && v1709:0 < 0 && v2305:0 > 0 f_579(v1706:0, v1707:0, v1708:0, v1709:0, v1710:0, v1711:0, 1, 0, v1714:0, v1715:0, v1716:0, v1717:0, v1718:0, 3, 4) -> f_579(v1706:0, v1707:0, v1708:0, v1709:0, v1710:0, v1715:0, 1, 0, v2305:0, 1 + v1715:0, v1716:0, v1717:0, v1718:0, 3, 4) :|: v1715:0 > 0 && v1711:0 < 0 && v1715:0 < 1 && v1709:0 < 0 && v2305:0 < 0 f_579(v1706:0, v1707:0, v1708:0, v1709:0, v1710:0, v1711:0, 1, 0, v1714:0, v1715:0, v1716:0, v1717:0, v1718:0, 3, 4) -> f_579(v1706:0, v1707:0, v1708:0, v1709:0, v1710:0, v1715:0, 1, 0, v2305:0, 1 + v1715:0, v1716:0, v1717:0, v1718:0, 3, 4) :|: v1715:0 > 0 && v1711:0 < 0 && v1715:0 < 1 && v1709:0 < 0 && v2305:0 > 0 Filtered unneeded arguments: f_579(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15) -> f_579(x4, x6, x10) Removed division, modulo operations, cleaned up constraints. Obtained 2 rules.P rules: f_579(v1709:0, v1711:0, v1715:0) -> f_579(v1709:0, v1715:0, 1 + v1715:0) :|: v1711:0 < 0 && v1715:0 < 0 && v1709:0 < 0 && v1715:0 < 1 f_579(v1709:0, v1711:0, v1715:0) -> f_579(v1709:0, v1715:0, 1 + v1715:0) :|: v1711:0 < 0 && v1715:0 > 0 && v1709:0 < 0 && v1715:0 < 1 ---------------------------------------- (93) Obligation: Rules: f_579(v1709:0, v1711:0, v1715:0) -> f_579(v1709:0, v1715:0, 1 + v1715:0) :|: v1711:0 < 0 && v1715:0 < 0 && v1709:0 < 0 && v1715:0 < 1 f_579(x, x1, x2) -> f_579(x, x2, 1 + x2) :|: x1 < 0 && x2 > 0 && x < 0 && x2 < 1 ---------------------------------------- (94) IRS2T2 (EQUIVALENT) Transformed input IRS into an integer transition system.Used the following mapping from defined symbols to location IDs: (f_579_3,1) ---------------------------------------- (95) Obligation: START: 0; FROM: 0; TO: 1; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; assume(oldX1 < 0 && oldX2 < 0 && oldX0 < 0 && oldX2 < 1); x0 := oldX0; x1 := oldX2; x2 := 1 + oldX2; TO: 1; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; assume(oldX1 < 0 && oldX2 > 0 && oldX0 < 0 && oldX2 < 1); x0 := oldX0; x1 := oldX2; x2 := 1 + oldX2; TO: 1; ---------------------------------------- (96) T2 (EQUIVALENT) Initially, performed program simplifications using lexicographic rank functions: * Removed transitions 1, 4, 5 using the following rank functions: - Rank function 1: RF for loc. 5: 1-2*x2 RF for loc. 6: -2*x2 Bound for (chained) transitions 4: 0 Bound for (chained) transitions 5: 0 - Rank function 2: RF for loc. 5: 0 RF for loc. 6: -1 Bound for (chained) transitions 1: 0 ---------------------------------------- (97) YES ---------------------------------------- (98) Obligation: SCC ---------------------------------------- (99) SCC2IRS (SOUND) Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: Generated rules. Obtained 22 rulesP rules: f_567(v1634, v1635, v1636, v1637, v1638, 1, v1640, 0, v1642, v1643, v1644, v1645, 3, 4) -> f_578(v1634, v1635, v1636, v1637, v1638, 1, v1640, 0, v1642, v1643, v1644, v1645, 3, 4) :|: 0 = 0 f_578(v1634, v1635, v1636, v1637, v1638, 1, v1640, 0, v1642, v1643, v1644, v1645, 3, 4) -> f_586(v1634, v1635, v1636, v1637, v1638, 1, v1640, 0, v1642, v1643, v1644, v1645, 3, 4) :|: TRUE f_586(v1634, v1635, v1636, v1637, v1638, 1, v1640, 0, v1642, v1643, v1644, v1645, 3, 4) -> f_594(v1634, v1635, v1636, v1637, v1638, 1, v1642, 0, v1640, v1643, v1644, v1645, 3, 4) :|: 0 = 0 f_594(v1634, v1635, v1636, v1637, v1638, 1, v1642, 0, v1640, v1643, v1644, v1645, 3, 4) -> f_603(v1634, v1635, v1636, v1637, v1638, 1, v1642, 0, v1640, v1643, v1644, v1645, 3, 2, 4) :|: 0 < v1642 && 2 <= v1640 && 2 <= v1638 f_603(v1634, v1635, v1636, v1637, v1638, 1, v1642, 0, v1640, v1643, v1644, v1645, 3, 2, 4) -> f_613(v1634, v1635, v1636, v1637, v1638, 1, v1642, 0, v1640, v1643, v1644, v1645, 3, 2, 4) :|: 0 = 0 f_613(v1634, v1635, v1636, v1637, v1638, 1, v1642, 0, v1640, v1643, v1644, v1645, 3, 2, 4) -> f_622(v1634, v1635, v1636, v1637, v1638, 1, v1642, 0, v1640, v1643, v1644, v1645, 3, 2, 4) :|: 0 = 0 f_622(v1634, v1635, v1636, v1637, v1638, 1, v1642, 0, v1640, v1643, v1644, v1645, 3, 2, 4) -> f_631(v1634, v1635, v1636, v1637, v1638, 1, v1642, 0, v1640, v1643, v1644, v1645, 3, 2, 4) :|: TRUE f_631(v1634, v1635, v1636, v1637, v1638, 1, v1642, 0, v1640, v1643, v1644, v1645, 3, 2, 4) -> f_640(v1634, v1635, v1636, v1637, v1638, 1, v1642, 0, v1640, v1643, v1644, v1645, 3, 2, 4) :|: 0 = 0 f_640(v1634, v1635, v1636, v1637, v1638, 1, v1642, 0, v1640, v1643, v1644, v1645, 3, 2, 4) -> f_645(v1634, v1635, v1636, v1637, v1638, 1, v1642, 0, v1640, v1643, v1644, v1645, 3, 2, 4) :|: 0 = 0 f_645(v1634, v1635, v1636, v1637, v1638, 1, v1642, 0, v1640, v1643, v1644, v1645, 3, 2, 4) -> f_650(v1634, v1635, v1636, v1637, v1638, 1, v1642, 0, v1640, v1643, v1644, v1645, 3, 2, 4) :|: TRUE f_650(v1634, v1635, v1636, v1637, v1638, 1, v1642, 0, v1640, v1643, v1644, v1645, 3, 2, 4) -> f_655(v1634, v1635, v1636, v1637, v1638, 1, v1642, v2254, 0, v1640, v1643, v1644, v1645, 3, 2, 4) :|: TRUE f_655(v1634, v1635, v1636, v1637, v1638, 1, v1642, v2254, 0, v1640, v1643, v1644, v1645, 3, 2, 4) -> f_663(v1634, v1635, v1636, v1637, v1638, 1, v1642, 0, v1640, v1643, v1644, v1645, 3, 2, 4) :|: v2254 = 0 f_663(v1634, v1635, v1636, v1637, v1638, 1, v1642, 0, v1640, v1643, v1644, v1645, 3, 2, 4) -> f_671(v1634, v1635, v1636, v1637, v1638, 1, v1642, 0, v1640, v1643, v1644, v1645, 3, 2, 4) :|: 0 = 0 f_671(v1634, v1635, v1636, v1637, v1638, 1, v1642, 0, v1640, v1643, v1644, v1645, 3, 2, 4) -> f_679(v1634, v1635, v1636, v1637, v1638, 1, v1642, 0, v1640, v1643, v1644, v1645, 3, 2, 4) :|: TRUE f_679(v1634, v1635, v1636, v1637, v1638, 1, v1642, 0, v1640, v1643, v1644, v1645, 3, 2, 4) -> f_687(v1634, v1635, v1636, v1637, v1638, 1, v1642, 0, v1643, v1644, v1645, 3, 2, 4) :|: 0 = 0 f_687(v1634, v1635, v1636, v1637, v1638, 1, v1642, 0, v1643, v1644, v1645, 3, 2, 4) -> f_697(v1634, v1635, v1636, v1637, v1638, 1, v1642, 0, v2422, v1643, v1644, v1645, 3, 2, 4) :|: 1 + v2422 = v1642 && 0 <= v2422 f_697(v1634, v1635, v1636, v1637, v1638, 1, v1642, 0, v2422, v1643, v1644, v1645, 3, 2, 4) -> f_706(v1634, v1635, v1636, v1637, v1638, 1, v1642, 0, v2422, v1643, v1644, v1645, 3, 2, 4) :|: TRUE f_706(v1634, v1635, v1636, v1637, v1638, 1, v1642, 0, v2422, v1643, v1644, v1645, 3, 2, 4) -> f_715(v1634, v1635, v1636, v1637, v1638, 1, v1642, 0, v2422, v1643, v1644, v1645, 3, 2, 4) :|: TRUE f_715(v1634, v1635, v1636, v1637, v1638, 1, v1642, 0, v2422, v1643, v1644, v1645, 3, 2, 4) -> f_724(v1634, v1635, v1636, v1637, v1638, 1, v1642, 0, v2422, v1643, v1644, v1645, 3, 2, 4) :|: TRUE f_724(v1634, v1635, v1636, v1637, v1638, 1, v1642, 0, v2422, v1643, v1644, v1645, 3, 2, 4) -> f_732(v1634, v1635, v1636, v1637, v1638, 1, v1642, 0, v2422, v1643, v1644, v1645, 3, 2, 4) :|: TRUE f_732(v1634, v1635, v1636, v1637, v1638, 1, v1642, 0, v2422, v1643, v1644, v1645, 3, 2, 4) -> f_556(v1634, v1635, v1636, v1637, v1638, 1, v1642, 0, v2422, v1643, v1644, v1645, 3, 4) :|: TRUE f_556(v1634, v1635, v1636, v1637, v1638, 1, v1640, 0, v1642, v1643, v1644, v1645, 3, 4) -> f_567(v1634, v1635, v1636, v1637, v1638, 1, v1640, 0, v1642, v1643, v1644, v1645, 3, 4) :|: 0 = 0 Combined rules. Obtained 1 rulesP rules: f_567(v1634:0, v1635:0, v1636:0, v1637:0, v1638:0, 1, v1640:0, 0, 1 + v2422:0, v1643:0, v1644:0, v1645:0, 3, 4) -> f_567(v1634:0, v1635:0, v1636:0, v1637:0, v1638:0, 1, 1 + v2422:0, 0, v2422:0, v1643:0, v1644:0, v1645:0, 3, 4) :|: v1640:0 > 1 && v2422:0 > -1 && v1638:0 > 1 Filtered unneeded arguments: f_567(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14) -> f_567(x5, x7, x9) Removed division, modulo operations, cleaned up constraints. Obtained 1 rules.P rules: f_567(v1638:0, v1640:0, sum~cons_1~v2422:0) -> f_567(v1638:0, 1 + v2422:0, v2422:0) :|: v2422:0 > -1 && v1638:0 > 1 && v1640:0 > 1 && sum~cons_1~v2422:0 = 1 + v2422:0 ---------------------------------------- (100) Obligation: Rules: f_567(v1638:0, v1640:0, sum~cons_1~v2422:0) -> f_567(v1638:0, 1 + v2422:0, v2422:0) :|: v2422:0 > -1 && v1638:0 > 1 && v1640:0 > 1 && sum~cons_1~v2422:0 = 1 + v2422:0 ---------------------------------------- (101) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (102) Obligation: Rules: f_567(v1638:0:0, v1640:0:0, sum~cons_1~v2422:0:0) -> f_567(v1638:0:0, 1 + v2422:0:0, v2422:0:0) :|: v2422:0:0 > -1 && v1638:0:0 > 1 && v1640:0:0 > 1 && sum~cons_1~v2422:0:0 = 1 + v2422:0:0 ---------------------------------------- (103) RankingReductionPairProof (EQUIVALENT) Interpretation: [ f_567 ] = f_567_3 The following rules are decreasing: f_567(v1638:0:0, v1640:0:0, sum~cons_1~v2422:0:0) -> f_567(v1638:0:0, 1 + v2422:0:0, v2422:0:0) :|: v2422:0:0 > -1 && v1638:0:0 > 1 && v1640:0:0 > 1 && sum~cons_1~v2422:0:0 = 1 + v2422:0:0 The following rules are bounded: f_567(v1638:0:0, v1640:0:0, sum~cons_1~v2422:0:0) -> f_567(v1638:0:0, 1 + v2422:0:0, v2422:0:0) :|: v2422:0:0 > -1 && v1638:0:0 > 1 && v1640:0:0 > 1 && sum~cons_1~v2422:0:0 = 1 + v2422:0:0 ---------------------------------------- (104) YES