/export/starexec/sandbox/solver/bin/starexec_run_c /export/starexec/sandbox/benchmark/theBenchmark.c /export/starexec/sandbox/output/output_files -------------------------------------------------------------------------------- YES proof of /export/starexec/sandbox/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, 178 ms] (2) LLVM problem (3) LLVMToTerminationGraphProof [EQUIVALENT, 1492 ms] (4) LLVM Symbolic Execution Graph (5) SymbolicExecutionGraphToSCCProof [SOUND, 0 ms] (6) AND (7) LLVM Symbolic Execution SCC (8) SCC2IRS [SOUND, 126 ms] (9) IntTRS (10) IRS2T2 [EQUIVALENT, 0 ms] (11) T2IntSys (12) T2 [EQUIVALENT, 885 ms] (13) YES (14) LLVM Symbolic Execution SCC (15) SCC2IRS [SOUND, 74 ms] (16) IntTRS (17) IntTRSCompressionProof [EQUIVALENT, 1 ms] (18) IntTRS (19) PolynomialOrderProcessor [EQUIVALENT, 9 ms] (20) YES ---------------------------------------- (0) Obligation: c file /export/starexec/sandbox/benchmark/theBenchmark.c ---------------------------------------- (1) CToLLVMProof (EQUIVALENT) Compiled c-file /export/starexec/sandbox/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: Name: x initVal: null type: *i32 addrSpace: null alignment: 8 threadLocal: false constant: false linkageType: COMMON section: null Function declarations and definitions: *BasicFunctionTypename: "__VERIFIER_nondet_int" returnParam: i32 parameters: () variableLength: false visibilityType: DEFAULT callingConvention: ccc *BasicFunctionTypename: "foo" linkageType: EXTERNALLY_VISIBLE returnParam: i32 parameters: () variableLength: false visibilityType: DEFAULT callingConvention: ccc 0: %1 = alloca i32, align 4 %2 = load @x %3 = load %2 %4 = add %3 -1 store %4, %2 %5 = load %1 ret %5 *BasicFunctionTypename: "main" linkageType: EXTERNALLY_VISIBLE returnParam: i32 parameters: () variableLength: false visibilityType: DEFAULT callingConvention: ccc 0: %1 = alloca i32, align 4 store 0, %1 %2 = alloca i8, numElementsLit: 4 %3 = bitcast *i8 %2 to *i32 store %3, @x %4 = call i32 @__VERIFIER_nondet_int() %5 = load @x store %4, %5 br %6 6: %7 = load @x %8 = load %7 %9 = icmp sgt %8 0 br %9, %10, %18 10: %11 = call i32 @__VERIFIER_nondet_int() %12 = icmp ne %11 0 br %12, %13, %15 13: %14 = call i32 @foo() br %17 15: %16 = call i32 @foo() br %17 17: br %6 18: 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 2 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 49 rulesP rules: f_235(v189, v212, v196, v190, v197, v191, v198, v213, 0, v193, v192, 1, 7, 3, 8, 4) -> f_238(v189, v212, v191, v196, v190, v197, v198, v213, 0, v193, v192, 1, 7, 3, 8, 4) :|: 0 = 0 f_238(v189, v212, v191, v196, v190, v197, v198, v213, 0, v193, v192, 1, 7, 3, 8, 4) -> f_241(v189, v212, v191, v193, v196, v190, v197, v198, v213, 0, v192, 1, 7, 3, 8, 4) :|: 0 = 0 f_241(v189, v212, v191, v193, v196, v190, v197, v198, v213, 0, v192, 1, 7, 3, 8, 4) -> f_244(v189, v212, v191, v193, v216, v196, v190, v197, v198, v213, 0, v192, 1, 7, 3, 8, 4) :|: 1 + v216 = v193 && 0 <= v216 f_244(v189, v212, v191, v193, v216, v196, v190, v197, v198, v213, 0, v192, 1, 7, 3, 8, 4) -> f_247(v189, v212, v191, v193, v216, v196, v190, v197, v198, v213, 0, v192, 1, 7, 3, 8, 4) :|: TRUE f_247(v189, v212, v191, v193, v216, v196, v190, v197, v198, v213, 0, v192, 1, 7, 3, 8, 4) -> f_250(v189, v212, v191, v193, v216, v224, v196, v190, v197, v198, v213, 0, v192, 1, 7, 3, 8, 4) :|: TRUE f_250(v189, v212, v191, v193, v216, v224, v196, v190, v197, v198, v213, 0, v192, 1, 7, 3, 8, 4) -> f_253(v189, v190, v191, v192, v193, 1, 0, v224, v196, v197, v198, v216, 7, 3, 8, 4) :|: 0 = 0 f_253(v189, v190, v191, v192, v193, 1, 0, v224, v196, v197, v198, v216, 7, 3, 8, 4) -> f_256(v189, v190, v191, v192, v193, 1, 0, v224, v196, v197, v198, v216, 7, 3, 8, 4) :|: TRUE f_256(v189, v190, v191, v192, v193, 1, 0, v224, v196, v197, v198, v216, 7, 3, 8, 4) -> f_259(v189, v190, v191, v192, v193, 1, 0, v224, v196, v197, v198, v216, 7, 3, 8, 4) :|: TRUE f_259(v189, v190, v191, v192, v193, 1, 0, v224, v196, v197, v198, v216, 7, 3, 8, 4) -> f_261(v189, v190, v191, v192, v193, 1, 0, v224, v196, v197, v198, v216, 7, 3, 8, 4) :|: 0 = 0 f_261(v189, v190, v191, v192, v193, 1, 0, v224, v196, v197, v198, v216, 7, 3, 8, 4) -> f_263(v189, v190, v191, v192, v216, 1, 0, v224, v196, v197, v198, 7, 3, 8, 4) :|: 0 = 0 f_263(v189, v190, v191, v192, v216, 1, 0, v224, v196, v197, v198, 7, 3, 8, 4) -> f_266(v189, v190, v191, v192, v216, 1, 0, v224, v196, v197, v198, 7, 3, 2, 8, 4) :|: 0 < v216 && 2 <= v192 f_266(v189, v190, v191, v192, v216, 1, 0, v224, v196, v197, v198, 7, 3, 2, 8, 4) -> f_270(v189, v190, v191, v192, v216, 1, 0, v224, v196, v197, v198, 7, 3, 2, 8, 4) :|: 0 = 0 f_270(v189, v190, v191, v192, v216, 1, 0, v224, v196, v197, v198, 7, 3, 2, 8, 4) -> f_274(v189, v190, v191, v192, v216, 1, 0, v224, v196, v197, v198, 7, 3, 2, 8, 4) :|: TRUE f_274(v189, v190, v191, v192, v216, 1, 0, v224, v196, v197, v198, 7, 3, 2, 8, 4) -> f_277(v189, v190, v191, v192, v216, 1, v269, 0, v224, v196, v197, v198, 7, 3, 2, 8, 4) :|: TRUE f_277(v189, v190, v191, v192, v216, 1, v269, 0, v224, v196, v197, v198, 7, 3, 2, 8, 4) -> f_280(v189, v190, v191, v192, v216, 1, v269, 0, v224, v196, v197, v198, 7, 3, 2, 8, 4) :|: v269 != 0 f_277(v189, v190, v191, v192, v216, 1, v269, 0, v224, v196, v197, v198, 7, 3, 2, 8, 4) -> f_281(v189, v190, v191, v192, v216, 1, 0, v224, v196, v197, v198, 7, 3, 2, 8, 4) :|: v269 = 0 f_280(v189, v190, v191, v192, v216, 1, v269, 0, v224, v196, v197, v198, 7, 3, 2, 8, 4) -> f_284(v189, v190, v191, v192, v216, 1, v269, v224, v196, v197, v198, 0, 7, 3, 2, 8, 4) :|: 0 = 0 f_284(v189, v190, v191, v192, v216, 1, v269, v224, v196, v197, v198, 0, 7, 3, 2, 8, 4) -> f_288(v189, v190, v191, v192, v216, 1, v269, v224, v196, v197, v198, 0, 7, 3, 2, 8, 4) :|: TRUE f_288(v189, v190, v191, v192, v216, 1, v269, v224, v196, v197, v198, 0, 7, 3, 2, 8, 4) -> f_292(v189, v196, v190, v197, v191, v198, 0, v216, v192, 1, v269, v224, 7, 3, 2, 8, 4) :|: TRUE f_292(v189, v196, v190, v197, v191, v198, 0, v216, v192, 1, v269, v224, 7, 3, 2, 8, 4) -> f_295(v189, v318, v196, v190, v197, v191, v198, v319, 0, v216, v192, 1, v269, v224, 7, 3, 2, 8, 4) :|: 1 <= v318 && v319 = 3 + v318 && 4 <= v319 f_295(v189, v318, v196, v190, v197, v191, v198, v319, 0, v216, v192, 1, v269, v224, 7, 3, 2, 8, 4) -> f_297(v189, v318, v191, v196, v190, v197, v198, v319, 0, v216, v192, 1, v269, v224, 7, 3, 2, 8, 4) :|: 0 = 0 f_297(v189, v318, v191, v196, v190, v197, v198, v319, 0, v216, v192, 1, v269, v224, 7, 3, 2, 8, 4) -> f_299(v189, v318, v191, v216, v196, v190, v197, v198, v319, 0, v192, 1, v269, v224, 7, 3, 2, 8, 4) :|: 0 = 0 f_299(v189, v318, v191, v216, v196, v190, v197, v198, v319, 0, v192, 1, v269, v224, 7, 3, 2, 8, 4) -> f_301(v189, v318, v191, v216, v321, v196, v190, v197, v198, v319, 0, v192, 1, v269, v224, 7, 3, 2, 8, 4) :|: 1 + v321 = v216 && 0 <= v321 f_301(v189, v318, v191, v216, v321, v196, v190, v197, v198, v319, 0, v192, 1, v269, v224, 7, 3, 2, 8, 4) -> f_303(v189, v318, v191, v216, v321, v196, v190, v197, v198, v319, 0, v192, 1, v269, v224, 7, 3, 2, 8, 4) :|: TRUE f_303(v189, v318, v191, v216, v321, v196, v190, v197, v198, v319, 0, v192, 1, v269, v224, 7, 3, 2, 8, 4) -> f_305(v189, v318, v191, v216, v321, v326, v196, v190, v197, v198, v319, 0, v192, 1, v269, v224, 7, 3, 2, 8, 4) :|: TRUE f_305(v189, v318, v191, v216, v321, v326, v196, v190, v197, v198, v319, 0, v192, 1, v269, v224, 7, 3, 2, 8, 4) -> f_307(v189, v190, v191, v192, v216, 1, v269, v224, v326, v196, v197, v198, 0, v321, 7, 3, 2, 8, 4) :|: 0 = 0 f_307(v189, v190, v191, v192, v216, 1, v269, v224, v326, v196, v197, v198, 0, v321, 7, 3, 2, 8, 4) -> f_309(v189, v190, v191, v192, v216, 1, v269, v224, v326, v196, v197, v198, 0, v321, 7, 3, 2, 8, 4) :|: TRUE f_309(v189, v190, v191, v192, v216, 1, v269, v224, v326, v196, v197, v198, 0, v321, 7, 3, 2, 8, 4) -> f_311(v189, v190, v191, v192, v216, 1, v269, v224, v326, v196, v197, v198, 0, v321, 7, 3, 2, 8, 4) :|: TRUE f_311(v189, v190, v191, v192, v216, 1, v269, v224, v326, v196, v197, v198, 0, v321, 7, 3, 2, 8, 4) -> f_312(v189, v190, v191, v192, v216, 1, v269, v224, v326, v196, v197, v198, 0, v321, 7, 3, 2, 8, 4) :|: 0 = 0 f_312(v189, v190, v191, v192, v216, 1, v269, v224, v326, v196, v197, v198, 0, v321, 7, 3, 2, 8, 4) -> f_313(v189, v190, v191, v192, v321, 1, v269, v224, v326, v196, v197, v198, 0, 7, 3, 2, 8, 4) :|: 0 = 0 f_313(v189, v190, v191, v192, v321, 1, v269, v224, v326, v196, v197, v198, 0, 7, 3, 2, 8, 4) -> f_314(v189, v190, v191, v192, v321, 1, v269, v224, v326, v196, v197, v198, 0, 7, 3, 2, 8, 4) :|: 0 < v321 && 3 <= v192 f_314(v189, v190, v191, v192, v321, 1, v269, v224, v326, v196, v197, v198, 0, 7, 3, 2, 8, 4) -> f_316(v189, v190, v191, v192, v321, 1, v269, v224, v326, v196, v197, v198, 0, 7, 3, 2, 8, 4) :|: 0 = 0 f_316(v189, v190, v191, v192, v321, 1, v269, v224, v326, v196, v197, v198, 0, 7, 3, 2, 8, 4) -> f_318(v189, v190, v191, v192, v321, 1, v269, v224, v326, v196, v197, v198, 0, 7, 3, 2, 8, 4) :|: TRUE f_318(v189, v190, v191, v192, v321, 1, v269, v224, v326, v196, v197, v198, 0, 7, 3, 2, 8, 4) -> f_320(v189, v190, v191, v192, v321, 1, v411, v224, v326, v196, v197, v198, 0, 7, 3, 2, 8, 4) :|: TRUE f_320(v189, v190, v191, v192, v321, 1, v411, v224, v326, v196, v197, v198, 0, 7, 3, 2, 8, 4) -> f_321(v189, v190, v191, v192, v321, 1, v411, v224, v326, v196, v197, v198, 0, 7, 3, 2, 8, 4) :|: v411 != 0 f_320(v189, v190, v191, v192, v321, 1, v411, v224, v326, v196, v197, v198, 0, 7, 3, 2, 8, 4) -> f_322(v189, v190, v191, v192, v321, 1, 0, v224, v326, v196, v197, v198, 7, 3, 2, 8, 4) :|: v411 = 0 f_321(v189, v190, v191, v192, v321, 1, v411, v224, v326, v196, v197, v198, 0, 7, 3, 2, 8, 4) -> f_323(v189, v190, v191, v192, v321, 1, v411, v224, v326, v196, v197, v198, 0, 7, 3, 2, 8, 4) :|: 0 = 0 f_323(v189, v190, v191, v192, v321, 1, v411, v224, v326, v196, v197, v198, 0, 7, 3, 2, 8, 4) -> f_325(v189, v190, v191, v192, v321, 1, v411, v224, v326, v196, v197, v198, 0, 7, 3, 2, 8, 4) :|: TRUE f_325(v189, v190, v191, v192, v321, 1, v411, v224, v326, v196, v197, v198, 0, 7, 3, 2, 8, 4) -> f_327(v189, v196, v190, v197, v191, v198, 0, v321, v192, 1, v411, v224, v326, 7, 3, 2, 8, 4) :|: TRUE f_327(v189, v196, v190, v197, v191, v198, 0, v321, v192, 1, v411, v224, v326, 7, 3, 2, 8, 4) -> f_292(v189, v196, v190, v197, v191, v198, 0, v321, v192, 1, v269, v224, 7, 3, 2, 8, 4) :|: TRUE f_322(v189, v190, v191, v192, v321, 1, 0, v224, v326, v196, v197, v198, 7, 3, 2, 8, 4) -> f_324(v189, v190, v191, v192, v321, 1, 0, v224, v326, v196, v197, v198, 7, 3, 2, 8, 4) :|: 0 = 0 f_324(v189, v190, v191, v192, v321, 1, 0, v224, v326, v196, v197, v198, 7, 3, 2, 8, 4) -> f_326(v189, v190, v191, v192, v321, 1, 0, v224, v326, v196, v197, v198, 7, 3, 2, 8, 4) :|: TRUE f_326(v189, v190, v191, v192, v321, 1, 0, v224, v326, v196, v197, v198, 7, 3, 2, 8, 4) -> f_328(v189, v196, v190, v197, v191, v198, 0, v321, v192, 1, v224, v326, 7, 3, 2, 8, 4) :|: TRUE f_328(v189, v196, v190, v197, v191, v198, 0, v321, v192, 1, v224, v326, 7, 3, 2, 8, 4) -> f_232(v189, v196, v190, v197, v191, v198, 0, v321, v192, 1, 7, 3, 8, 4) :|: TRUE f_232(v189, v196, v190, v197, v191, v198, 0, v193, v192, 1, 7, 3, 8, 4) -> f_235(v189, v212, v196, v190, v197, v191, v198, v213, 0, v193, v192, 1, 7, 3, 8, 4) :|: 1 <= v212 && v213 = 3 + v212 && 4 <= v213 f_281(v189, v190, v191, v192, v216, 1, 0, v224, v196, v197, v198, 7, 3, 2, 8, 4) -> f_285(v189, v190, v191, v192, v216, 1, 0, v224, v196, v197, v198, 7, 3, 2, 8, 4) :|: 0 = 0 f_285(v189, v190, v191, v192, v216, 1, 0, v224, v196, v197, v198, 7, 3, 2, 8, 4) -> f_289(v189, v190, v191, v192, v216, 1, 0, v224, v196, v197, v198, 7, 3, 2, 8, 4) :|: TRUE f_289(v189, v190, v191, v192, v216, 1, 0, v224, v196, v197, v198, 7, 3, 2, 8, 4) -> f_293(v189, v196, v190, v197, v191, v198, 0, v216, v192, 1, v224, 7, 3, 2, 8, 4) :|: TRUE f_293(v189, v196, v190, v197, v191, v198, 0, v216, v192, 1, v224, 7, 3, 2, 8, 4) -> f_232(v189, v196, v190, v197, v191, v198, 0, v216, v192, 1, 7, 3, 8, 4) :|: TRUE Combined rules. Obtained 6 rulesP rules: f_320(v189:0, v190:0, v191:0, v192:0, 1 + v321:1, 1, v411:0, v224:0, v326:0, v196:0, v197:0, v198:0, 0, 7, 3, 2, 8, 4) -> f_320(v189:0, v190:0, v191:0, v192:0, v321:1, 1, v411:1, v224:0, v326:1, v196:0, v197:0, v198:0, 0, 7, 3, 2, 8, 4) :|: v321:1 > 0 && v318:0 > 0 && v411:0 < 0 && v192:0 > 2 f_320(v189:0, v190:0, v191:0, v192:0, 1 + v321:1, 1, v411:0, v224:0, v326:0, v196:0, v197:0, v198:0, 0, 7, 3, 2, 8, 4) -> f_320(v189:0, v190:0, v191:0, v192:0, v321:1, 1, v411:1, v224:0, v326:1, v196:0, v197:0, v198:0, 0, 7, 3, 2, 8, 4) :|: v321:1 > 0 && v318:0 > 0 && v411:0 > 0 && v192:0 > 2 f_235(v189:0, v212:0, v196:0, v190:0, v197:0, v191:0, v198:0, v213:0, 0, 1 + (1 + v321:0), v192:0, 1, 7, 3, 8, 4) -> f_320(v189:0, v190:0, v191:0, v192:0, v321:0, 1, v411:0, v224:0, v326:0, v196:0, v197:0, v198:0, 0, 7, 3, 2, 8, 4) :|: v321:0 > 0 && v192:0 > 2 && v269:0 < 0 && v318:0 > 0 f_235(v189:0, v212:0, v196:0, v190:0, v197:0, v191:0, v198:0, v213:0, 0, 1 + (1 + v321:0), v192:0, 1, 7, 3, 8, 4) -> f_320(v189:0, v190:0, v191:0, v192:0, v321:0, 1, v411:0, v224:0, v326:0, v196:0, v197:0, v198:0, 0, 7, 3, 2, 8, 4) :|: v321:0 > 0 && v192:0 > 2 && v269:0 > 0 && v318:0 > 0 f_320(v189:0, v190:0, v191:0, v192:0, v321:0, 1, 0, v224:0, v326:0, v196:0, v197:0, v198:0, 0, 7, 3, 2, 8, 4) -> f_235(v189:0, v212:0, v196:0, v190:0, v197:0, v191:0, v198:0, 3 + v212:0, 0, v321:0, v192:0, 1, 7, 3, 8, 4) :|: v212:0 > 0 f_235(v189:0, v212:0, v196:0, v190:0, v197:0, v191:0, v198:0, v213:0, 0, 1 + v216:0, v192:0, 1, 7, 3, 8, 4) -> f_235(v189:0, v212:1, v196:0, v190:0, v197:0, v191:0, v198:0, 3 + v212:1, 0, v216:0, v192:0, 1, 7, 3, 8, 4) :|: v216:0 > 0 && v192:0 > 1 && v212:1 > 0 Filtered unneeded arguments: f_320(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18) -> f_320(x4, x5, x7) f_235(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16) -> f_235(x10, x11) Removed division, modulo operations, cleaned up constraints. Obtained 5 rules.P rules: f_320(v192:0, sum~cons_1~v321:1, v411:0) -> f_320(v192:0, v321:1, v411:1) :|: v411:0 < 0 && v192:0 > 2 && v321:1 > 0 && sum~cons_1~v321:1 = 1 + v321:1 f_320(v192:0, sum~cons_1~v321:1, v411:0) -> f_320(v192:0, v321:1, v411:1) :|: v411:0 > 0 && v192:0 > 2 && v321:1 > 0 && sum~cons_1~v321:1 = 1 + v321:1 f_235(sum~cons_1~sum~cons_1~v321:0, v192:0) -> f_320(v192:0, v321:0, v411:0) :|: v321:0 > 0 && v192:0 > 2 && sum~cons_1~sum~cons_1~v321:0 = 1 + (1 + v321:0) f_320(v192:0, v321:0, cons_0) -> f_235(v321:0, v192:0) :|: TRUE && cons_0 = 0 f_235(sum~cons_1~v216:0, v192:0) -> f_235(v216:0, v192:0) :|: v216:0 > 0 && v192:0 > 1 && sum~cons_1~v216:0 = 1 + v216:0 ---------------------------------------- (9) Obligation: Rules: f_320(v192:0, sum~cons_1~v321:1, v411:0) -> f_320(v192:0, v321:1, v411:1) :|: v411:0 < 0 && v192:0 > 2 && v321:1 > 0 && sum~cons_1~v321:1 = 1 + v321:1 f_320(x, x1, x2) -> f_320(x, x3, x4) :|: x2 > 0 && x > 2 && x3 > 0 && x1 = 1 + x3 f_235(x5, x6) -> f_320(x6, x7, x8) :|: x7 > 0 && x6 > 2 && x5 = 1 + (1 + x7) f_320(x9, x10, x11) -> f_235(x10, x9) :|: TRUE && x11 = 0 f_235(x12, x13) -> f_235(x14, x13) :|: x14 > 0 && x13 > 1 && x12 = 1 + x14 ---------------------------------------- (10) IRS2T2 (EQUIVALENT) Transformed input IRS into an integer transition system.Used the following mapping from defined symbols to location IDs: (f_320_3,1) (f_235_3,2) ---------------------------------------- (11) Obligation: START: 0; FROM: 0; TO: 1; FROM: 0; TO: 2; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := oldX1 - 1; oldX4 := nondet(); assume(oldX2 < 0 && oldX0 > 2 && oldX3 > 0 && oldX1 = 1 + oldX3); x0 := oldX0; x1 := oldX1 - 1; x2 := oldX4; TO: 1; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := oldX1 - 1; oldX4 := nondet(); assume(oldX2 > 0 && oldX0 > 2 && oldX3 > 0 && oldX1 = 1 + oldX3); x0 := oldX0; x1 := oldX1 - 1; x2 := oldX4; TO: 1; FROM: 2; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := oldX0 - 2; oldX4 := nondet(); assume(oldX3 > 0 && oldX1 > 2 && oldX0 = 1 + (1 + oldX3)); x0 := oldX1; x1 := oldX0 - 2; x2 := oldX4; TO: 1; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := nondet(); assume(0 = 0 && oldX2 = 0); x0 := oldX1; x1 := oldX0; x2 := oldX3; TO: 2; FROM: 2; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := oldX0 - 1; oldX4 := nondet(); assume(oldX3 > 0 && oldX1 > 1 && oldX0 = 1 + oldX3); x0 := oldX0 - 1; x1 := oldX1; x2 := oldX4; TO: 2; ---------------------------------------- (12) 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: 5+3*x1 RF for loc. 7: 1+3*x0 RF for loc. 8: 4+3*x1 RF for loc. 12: 3*x0 Bound for (chained) transitions 5: 10 Bound for (chained) transitions 6: 10 Bound for (chained) transitions 20: 9 Bound for (chained) transitions 21: 6 - Rank function 2: RF for loc. 6: 3 RF for loc. 7: 1 RF for loc. 8: 2 RF for loc. 12: 0 Bound for (chained) transitions 2: 3 Bound for (chained) transitions 7: 2 Bound for (chained) transitions 17: 1 ---------------------------------------- (13) YES ---------------------------------------- (14) Obligation: SCC ---------------------------------------- (15) SCC2IRS (SOUND) Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: Generated rules. Obtained 20 rulesP rules: f_278(v238, v239, v240, v241, v250, 1, v268, v245, v246, v247, v248, 0, 7, 3, 2, 8, 4) -> f_282(v238, v239, v240, v241, v250, 1, v268, v245, v246, v247, v248, 0, 7, 3, 2, 8, 4) :|: 0 = 0 f_282(v238, v239, v240, v241, v250, 1, v268, v245, v246, v247, v248, 0, 7, 3, 2, 8, 4) -> f_286(v238, v239, v240, v241, v250, 1, v268, v245, v246, v247, v248, 0, 7, 3, 2, 8, 4) :|: TRUE f_286(v238, v239, v240, v241, v250, 1, v268, v245, v246, v247, v248, 0, 7, 3, 2, 8, 4) -> f_290(v238, v246, v239, v247, v240, v248, 0, v250, v241, 1, v268, v245, 7, 3, 2, 8, 4) :|: TRUE f_290(v238, v246, v239, v247, v240, v248, 0, v250, v241, 1, v268, v245, 7, 3, 2, 8, 4) -> f_294(v238, v316, v246, v239, v247, v240, v248, v317, 0, v250, v241, 1, v268, v245, 7, 3, 2, 8, 4) :|: 1 <= v316 && v317 = 3 + v316 && 4 <= v317 f_294(v238, v316, v246, v239, v247, v240, v248, v317, 0, v250, v241, 1, v268, v245, 7, 3, 2, 8, 4) -> f_296(v238, v316, v240, v246, v239, v247, v248, v317, 0, v250, v241, 1, v268, v245, 7, 3, 2, 8, 4) :|: 0 = 0 f_296(v238, v316, v240, v246, v239, v247, v248, v317, 0, v250, v241, 1, v268, v245, 7, 3, 2, 8, 4) -> f_298(v238, v316, v240, v250, v246, v239, v247, v248, v317, 0, v241, 1, v268, v245, 7, 3, 2, 8, 4) :|: 0 = 0 f_298(v238, v316, v240, v250, v246, v239, v247, v248, v317, 0, v241, 1, v268, v245, 7, 3, 2, 8, 4) -> f_300(v238, v316, v240, v250, v320, v246, v239, v247, v248, v317, 0, v241, 1, v268, v245, 7, 3, 2, 8, 4) :|: 1 + v320 = v250 && 0 <= v320 f_300(v238, v316, v240, v250, v320, v246, v239, v247, v248, v317, 0, v241, 1, v268, v245, 7, 3, 2, 8, 4) -> f_302(v238, v316, v240, v250, v320, v246, v239, v247, v248, v317, 0, v241, 1, v268, v245, 7, 3, 2, 8, 4) :|: TRUE f_302(v238, v316, v240, v250, v320, v246, v239, v247, v248, v317, 0, v241, 1, v268, v245, 7, 3, 2, 8, 4) -> f_304(v238, v316, v240, v250, v320, v324, v246, v239, v247, v248, v317, 0, v241, 1, v268, v245, 7, 3, 2, 8, 4) :|: TRUE f_304(v238, v316, v240, v250, v320, v324, v246, v239, v247, v248, v317, 0, v241, 1, v268, v245, 7, 3, 2, 8, 4) -> f_306(v238, v239, v240, v241, v250, 1, v268, v324, v246, v247, v248, 0, v320, 7, 3, 2, 8, 4) :|: 0 = 0 f_306(v238, v239, v240, v241, v250, 1, v268, v324, v246, v247, v248, 0, v320, 7, 3, 2, 8, 4) -> f_308(v238, v239, v240, v241, v250, 1, v268, v324, v246, v247, v248, 0, v320, 7, 3, 2, 8, 4) :|: TRUE f_308(v238, v239, v240, v241, v250, 1, v268, v324, v246, v247, v248, 0, v320, 7, 3, 2, 8, 4) -> f_310(v238, v239, v240, v241, v250, 1, v268, v324, v246, v247, v248, 0, v320, 7, 3, 2, 8, 4) :|: TRUE f_310(v238, v239, v240, v241, v250, 1, v268, v324, v246, v247, v248, 0, v320, 7, 3, 2, 8, 4) -> f_258(v238, v239, v240, v241, v250, 1, v268, v324, v246, v247, v248, 0, v320, 7, 3, 8, 4) :|: TRUE f_258(v238, v239, v240, v241, v242, 1, v244, v245, v246, v247, v248, 0, v250, 7, 3, 8, 4) -> f_260(v238, v239, v240, v241, v242, 1, v244, v245, v246, v247, v248, 0, v250, 7, 3, 8, 4) :|: 0 = 0 f_260(v238, v239, v240, v241, v242, 1, v244, v245, v246, v247, v248, 0, v250, 7, 3, 8, 4) -> f_262(v238, v239, v240, v241, v250, 1, v244, v245, v246, v247, v248, 0, 7, 3, 8, 4) :|: 0 = 0 f_262(v238, v239, v240, v241, v250, 1, v244, v245, v246, v247, v248, 0, 7, 3, 8, 4) -> f_264(v238, v239, v240, v241, v250, 1, v244, v245, v246, v247, v248, 0, 7, 3, 2, 8, 4) :|: 0 < v250 && 2 <= v241 f_264(v238, v239, v240, v241, v250, 1, v244, v245, v246, v247, v248, 0, 7, 3, 2, 8, 4) -> f_268(v238, v239, v240, v241, v250, 1, v244, v245, v246, v247, v248, 0, 7, 3, 2, 8, 4) :|: 0 = 0 f_268(v238, v239, v240, v241, v250, 1, v244, v245, v246, v247, v248, 0, 7, 3, 2, 8, 4) -> f_272(v238, v239, v240, v241, v250, 1, v244, v245, v246, v247, v248, 0, 7, 3, 2, 8, 4) :|: TRUE f_272(v238, v239, v240, v241, v250, 1, v244, v245, v246, v247, v248, 0, 7, 3, 2, 8, 4) -> f_276(v238, v239, v240, v241, v250, 1, v268, v245, v246, v247, v248, 0, 7, 3, 2, 8, 4) :|: TRUE f_276(v238, v239, v240, v241, v250, 1, v268, v245, v246, v247, v248, 0, 7, 3, 2, 8, 4) -> f_278(v238, v239, v240, v241, v250, 1, v268, v245, v246, v247, v248, 0, 7, 3, 2, 8, 4) :|: v268 != 0 Combined rules. Obtained 2 rulesP rules: f_278(v238:0, v239:0, v240:0, v241:0, 1 + v320:0, 1, v268:0, v245:0, v246:0, v247:0, v248:0, 0, 7, 3, 2, 8, 4) -> f_278(v238:0, v239:0, v240:0, v241:0, v320:0, 1, v268:1, v324:0, v246:0, v247:0, v248:0, 0, 7, 3, 2, 8, 4) :|: v320:0 > 0 && v316:0 > 0 && v268:1 < 0 && v241:0 > 1 f_278(v238:0, v239:0, v240:0, v241:0, 1 + v320:0, 1, v268:0, v245:0, v246:0, v247:0, v248:0, 0, 7, 3, 2, 8, 4) -> f_278(v238:0, v239:0, v240:0, v241:0, v320:0, 1, v268:1, v324:0, v246:0, v247:0, v248:0, 0, 7, 3, 2, 8, 4) :|: v320:0 > 0 && v316:0 > 0 && v268:1 > 0 && v241:0 > 1 Filtered unneeded arguments: f_278(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17) -> f_278(x4, x5) Removed division, modulo operations, cleaned up constraints. Obtained 1 rules.P rules: f_278(v241:0, sum~cons_1~v320:0) -> f_278(v241:0, v320:0) :|: v320:0 > 0 && v241:0 > 1 && sum~cons_1~v320:0 = 1 + v320:0 ---------------------------------------- (16) Obligation: Rules: f_278(v241:0, sum~cons_1~v320:0) -> f_278(v241:0, v320:0) :|: v320:0 > 0 && v241:0 > 1 && sum~cons_1~v320:0 = 1 + v320:0 ---------------------------------------- (17) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (18) Obligation: Rules: f_278(v241:0:0, sum~cons_1~v320:0:0) -> f_278(v241:0:0, v320:0:0) :|: v320:0:0 > 0 && v241:0:0 > 1 && sum~cons_1~v320:0:0 = 1 + v320:0:0 ---------------------------------------- (19) PolynomialOrderProcessor (EQUIVALENT) Found the following polynomial interpretation: [f_278(x, x1)] = x1 The following rules are decreasing: f_278(v241:0:0, sum~cons_1~v320:0:0) -> f_278(v241:0:0, v320:0:0) :|: v320:0:0 > 0 && v241:0:0 > 1 && sum~cons_1~v320:0:0 = 1 + v320:0:0 The following rules are bounded: f_278(v241:0:0, sum~cons_1~v320:0:0) -> f_278(v241:0:0, v320:0:0) :|: v320:0:0 > 0 && v241:0:0 > 1 && sum~cons_1~v320:0:0 = 1 + v320:0:0 ---------------------------------------- (20) YES