19.47/6.38 YES 19.75/6.39 proof of /export/starexec/sandbox2/benchmark/theBenchmark.c 19.75/6.39 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 19.75/6.39 19.75/6.39 19.75/6.39 Termination of the given C Problem could be proven: 19.75/6.39 19.75/6.39 (0) C Problem 19.75/6.39 (1) CToLLVMProof [EQUIVALENT, 172 ms] 19.75/6.39 (2) LLVM problem 19.75/6.39 (3) LLVMToTerminationGraphProof [EQUIVALENT, 2257 ms] 19.75/6.39 (4) LLVM Symbolic Execution Graph 19.75/6.39 (5) SymbolicExecutionGraphToSCCProof [SOUND, 0 ms] 19.75/6.39 (6) AND 19.75/6.39 (7) LLVM Symbolic Execution SCC 19.75/6.39 (8) SCC2IRS [SOUND, 94 ms] 19.75/6.39 (9) IntTRS 19.75/6.39 (10) IRS2T2 [EQUIVALENT, 0 ms] 19.75/6.39 (11) T2IntSys 19.75/6.39 (12) T2 [EQUIVALENT, 1343 ms] 19.75/6.39 (13) YES 19.75/6.39 (14) LLVM Symbolic Execution SCC 19.75/6.39 (15) SCC2IRS [SOUND, 41 ms] 19.75/6.39 (16) IntTRS 19.75/6.39 (17) TerminationGraphProcessor [EQUIVALENT, 6 ms] 19.75/6.39 (18) YES 19.75/6.39 19.75/6.39 19.75/6.39 ---------------------------------------- 19.75/6.39 19.75/6.39 (0) 19.75/6.39 Obligation: 19.75/6.39 c file /export/starexec/sandbox2/benchmark/theBenchmark.c 19.75/6.39 ---------------------------------------- 19.75/6.39 19.75/6.39 (1) CToLLVMProof (EQUIVALENT) 19.75/6.39 Compiled c-file /export/starexec/sandbox2/benchmark/theBenchmark.c to LLVM. 19.75/6.39 ---------------------------------------- 19.75/6.39 19.75/6.39 (2) 19.75/6.39 Obligation: 19.75/6.39 LLVM Problem 19.75/6.39 19.75/6.39 Aliases: 19.75/6.39 19.75/6.39 Data layout: 19.75/6.39 19.75/6.39 "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" 19.75/6.39 19.75/6.39 Machine: 19.75/6.39 19.75/6.39 "x86_64-pc-linux-gnu" 19.75/6.39 19.75/6.39 Type definitions: 19.75/6.39 19.75/6.39 Global variables: 19.75/6.39 19.75/6.39 Function declarations and definitions: 19.75/6.39 19.75/6.39 *BasicFunctionTypename: "__VERIFIER_nondet_int" returnParam: i32 parameters: () variableLength: true visibilityType: DEFAULT callingConvention: ccc 19.75/6.39 *BasicFunctionTypename: "rec1" linkageType: EXTERNALLY_VISIBLE returnParam: i32 parameters: (i i32) variableLength: false visibilityType: DEFAULT callingConvention: ccc 19.75/6.39 0: 19.75/6.39 %1 = alloca i32, align 4 19.75/6.39 %2 = alloca i32, align 4 19.75/6.39 store %i, %2 19.75/6.39 %3 = load %2 19.75/6.39 %4 = icmp sle %3 0 19.75/6.39 br %4, %5, %6 19.75/6.39 5: 19.75/6.39 store 0, %1 19.75/6.39 br %14 19.75/6.39 6: 19.75/6.39 %7 = load %2 19.75/6.39 %8 = sub %7 2 19.75/6.39 %9 = call i32 @rec1(i32 %8) 19.75/6.39 %10 = sub %9 1 19.75/6.39 %11 = call i32 @rec1(i32 %10) 19.75/6.39 %12 = call i32 @rec1(i32 %11) 19.75/6.39 %13 = add %12 1 19.75/6.39 store %13, %1 19.75/6.39 br %14 19.75/6.39 14: 19.75/6.39 %15 = load %1 19.75/6.39 ret %15 19.75/6.39 19.75/6.39 *BasicFunctionTypename: "rec2" linkageType: EXTERNALLY_VISIBLE returnParam: i32 parameters: (j i32) variableLength: false visibilityType: DEFAULT callingConvention: ccc 19.75/6.39 0: 19.75/6.39 %1 = alloca i32, align 4 19.75/6.39 %2 = alloca i32, align 4 19.75/6.39 store %j, %2 19.75/6.39 %3 = load %2 19.75/6.39 %4 = icmp sle %3 0 19.75/6.39 br %4, %5, %6 19.75/6.39 5: 19.75/6.39 store 0, %1 19.75/6.39 br %12 19.75/6.39 6: 19.75/6.39 %7 = load %2 19.75/6.39 %8 = call i32 @rec1(i32 %7) 19.75/6.39 %9 = sub %8 1 19.75/6.39 %10 = call i32 @rec2(i32 %9) 19.75/6.39 %11 = sub %10 1 19.75/6.39 store %11, %1 19.75/6.39 br %12 19.75/6.39 12: 19.75/6.39 %13 = load %1 19.75/6.39 ret %13 19.75/6.39 19.75/6.39 *BasicFunctionTypename: "main" linkageType: EXTERNALLY_VISIBLE returnParam: i32 parameters: () variableLength: false visibilityType: DEFAULT callingConvention: ccc 19.75/6.39 0: 19.75/6.39 %1 = alloca i32, align 4 19.75/6.39 %x = alloca i32, align 4 19.75/6.39 store 0, %1 19.75/6.39 %2 = call i32 (...)* @__VERIFIER_nondet_int() 19.75/6.39 store %2, %x 19.75/6.39 %3 = load %x 19.75/6.39 %4 = call i32 @rec2(i32 %3) 19.75/6.39 %5 = load %1 19.75/6.39 ret %5 19.75/6.39 19.75/6.39 19.75/6.39 Analyze Termination of all function calls matching the pattern: 19.75/6.39 main() 19.75/6.39 ---------------------------------------- 19.75/6.39 19.75/6.39 (3) LLVMToTerminationGraphProof (EQUIVALENT) 19.75/6.39 Constructed symbolic execution graph for LLVM program and proved memory safety. 19.75/6.39 ---------------------------------------- 19.75/6.39 19.75/6.39 (4) 19.75/6.39 Obligation: 19.75/6.39 SE Graph 19.75/6.39 ---------------------------------------- 19.75/6.39 19.75/6.39 (5) SymbolicExecutionGraphToSCCProof (SOUND) 19.75/6.39 Splitted symbolic execution graph to 2 SCCs. 19.75/6.39 ---------------------------------------- 19.75/6.39 19.75/6.39 (6) 19.75/6.39 Complex Obligation (AND) 19.75/6.39 19.75/6.39 ---------------------------------------- 19.75/6.39 19.75/6.39 (7) 19.75/6.39 Obligation: 19.75/6.39 SCC 19.75/6.39 ---------------------------------------- 19.75/6.39 19.75/6.39 (8) SCC2IRS (SOUND) 19.75/6.39 Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: 19.75/6.39 Generated rules. Obtained 36 rulesP rules: 19.75/6.39 f_275(v326, v327, v328, 3, 0, 1, 4) -> f_277(v326, v327, v329, v328, v330, 3, 0, 1, 4) :|: 1 <= v329 && v330 = 3 + v329 && 4 <= v330 19.75/6.39 f_277(v326, v327, v329, v328, v330, 3, 0, 1, 4) -> f_278(v326, v327, v329, v328, v330, 3, 0, 1, 4) :|: TRUE 19.75/6.39 f_278(v326, v327, v329, v328, v330, 3, 0, 1, 4) -> f_279(v326, v327, v329, v328, v330, 3, 0, 1, 4) :|: 0 = 0 19.75/6.39 f_279(v326, v327, v329, v328, v330, 3, 0, 1, 4) -> f_281(v326, v327, v329, v328, v330, 3, 1, 4) :|: 0 < v326 19.75/6.39 f_281(v326, v327, v329, v328, v330, 3, 1, 4) -> f_283(v326, v327, v329, 0, v328, v330, 3, 1, 4) :|: 0 = 0 19.75/6.39 f_283(v326, v327, v329, 0, v328, v330, 3, 1, 4) -> f_285(v326, v327, v329, 0, v328, v330, 3, 1, 4) :|: TRUE 19.75/6.39 f_285(v326, v327, v329, 0, v328, v330, 3, 1, 4) -> f_287(v326, v327, v329, 0, v328, v330, 3, 1, 4) :|: 0 = 0 19.75/6.39 f_287(v326, v327, v329, 0, v328, v330, 3, 1, 4) -> f_289(v326, v327, v329, 0, v332, v328, v330, 3, 2, 1, 4) :|: 2 + v332 = v326 && 0 <= 1 + v332 19.75/6.39 f_289(v326, v327, v329, 0, v332, v328, v330, 3, 2, 1, 4) -> f_291(v332, v327, v328, v329, v330, v326, 0, 3, 2, 1, 4) :|: 0 = 0 19.75/6.39 f_291(v332, v327, v328, v329, v330, v326, 0, 3, 2, 1, 4) -> f_293(v332, v327, v328, v329, v330, v326, 3, 2, 1, 4, 0) :|: TRUE 19.75/6.39 f_291(v332, v327, v328, v329, v330, v326, 0, 3, 2, 1, 4) -> f_294(v332, 0, v327, v328, v329, v330, v326, 3, 2, 1, 4) :|: TRUE 19.75/6.39 f_291(v332, v327, v328, v329, v330, v326, 0, 3, 2, 1, 4) -> f_415(v332, 1, v327, v328, v329, v330, v326, 0, 3, 2, 4) :|: TRUE 19.75/6.39 f_291(v332, v327, v328, v329, v330, v326, 0, 3, 2, 1, 4) -> f_449(v332, 1, v327, v328, v329, v330, v326, 0, 3, 2, 4) :|: TRUE 19.75/6.39 f_293(v332, v327, v328, v329, v330, v326, 3, 2, 1, 4, 0) -> f_272(v332, 0, 1) :|: TRUE 19.75/6.39 f_272(v326, 0, 1) -> f_275(v326, v327, v328, 3, 0, 1, 4) :|: 1 <= v327 && v328 = 3 + v327 && 4 <= v328 19.75/6.39 f_294(v332, 0, v327, v328, v329, v330, v326, 3, 2, 1, 4) -> f_295(v326, v327, v329, 0, v332, v328, v330, 3, 2, 1, 4) :|: 0 = 0 19.75/6.39 f_295(v326, v327, v329, 0, v332, v328, v330, 3, 2, 1, 4) -> f_296(v326, v327, v329, 0, v332, -1, v328, v330, 3, 2, 1, 4) :|: 0 = 0 19.75/6.39 f_296(v326, v327, v329, 0, v332, -1, v328, v330, 3, 2, 1, 4) -> f_297(-1, v327, v328, v329, v330, v326, 0, v332, 3, 2, 1, 4) :|: 0 = 0 19.75/6.39 f_297(-1, v327, v328, v329, v330, v326, 0, v332, 3, 2, 1, 4) -> f_298(-1, v327, v328, v329, v330, v326, 3, 1, 2, 4) :|: TRUE 19.75/6.39 f_297(-1, v327, v328, v329, v330, v326, 0, v332, 3, 2, 1, 4) -> f_299(-1, 0, v327, v328, v329, v330, v326, v332, 3, 2, 1, 4) :|: TRUE 19.75/6.39 f_298(-1, v327, v328, v329, v330, v326, 3, 1, 2, 4) -> f_272(-1, 0, 1) :|: TRUE 19.75/6.39 f_299(-1, 0, v327, v328, v329, v330, v326, v332, 3, 2, 1, 4) -> f_300(v326, v327, v329, 0, v332, -1, v328, v330, 3, 2, 1, 4) :|: 0 = 0 19.75/6.39 f_300(v326, v327, v329, 0, v332, -1, v328, v330, 3, 2, 1, 4) -> f_301(0, v327, v328, v329, v330, v326, v332, -1, 3, 2, 1, 4) :|: 0 = 0 19.75/6.39 f_301(0, v327, v328, v329, v330, v326, v332, -1, 3, 2, 1, 4) -> f_302(0, v327, v328, v329, v330, v326, 3, 1, 2, 4) :|: TRUE 19.75/6.39 f_302(0, v327, v328, v329, v330, v326, 3, 1, 2, 4) -> f_272(0, 0, 1) :|: TRUE 19.75/6.39 f_415(v332, 1, v327, v328, v329, v330, v326, 0, 3, 2, 4) -> f_419(v326, v327, v329, 0, v332, 1, v328, v330, 3, 2, 4) :|: 0 = 0 19.75/6.39 f_419(v326, v327, v329, 0, v332, 1, v328, v330, 3, 2, 4) -> f_421(v326, v327, v329, 0, v332, 1, v328, v330, 3, 2, 4) :|: 0 = 0 19.75/6.39 f_421(v326, v327, v329, 0, v332, 1, v328, v330, 3, 2, 4) -> f_423(0, v327, v328, v329, v330, v326, v332, 1, 3, 2, 4) :|: 0 = 0 19.75/6.39 f_423(0, v327, v328, v329, v330, v326, v332, 1, 3, 2, 4) -> f_425(0, v327, v328, v329, v330, v326, 3, 1, 4) :|: TRUE 19.75/6.39 f_423(0, v327, v328, v329, v330, v326, v332, 1, 3, 2, 4) -> f_427(0, v327, v328, v329, v330, v326, v332, 1, 3, 2, 4) :|: TRUE 19.75/6.39 f_425(0, v327, v328, v329, v330, v326, 3, 1, 4) -> f_272(0, 0, 1) :|: TRUE 19.75/6.39 f_427(0, v327, v328, v329, v330, v326, v332, 1, 3, 2, 4) -> f_430(v326, v327, v329, 0, v332, 1, v328, v330, 3, 2, 4) :|: 0 = 0 19.75/6.39 f_430(v326, v327, v329, 0, v332, 1, v328, v330, 3, 2, 4) -> f_432(0, v327, v328, v329, v330, v326, v332, 1, 3, 2, 4) :|: 0 = 0 19.75/6.39 f_432(0, v327, v328, v329, v330, v326, v332, 1, 3, 2, 4) -> f_434(0, v327, v328, v329, v330, v326, 3, 1, 4) :|: TRUE 19.75/6.39 f_434(0, v327, v328, v329, v330, v326, 3, 1, 4) -> f_272(0, 0, 1) :|: TRUE 19.75/6.39 f_449(v332, 1, v327, v328, v329, v330, v326, 0, 3, 2, 4) -> f_415(v332, 1, v327, v328, v329, v330, v326, 0, 3, 2, 4) :|: TRUE 19.75/6.39 Combined rules. Obtained 5 rulesP rules: 19.75/6.39 f_275(2 + v332:0, v327:0, v328:0, 3, 0, 1, 4) -> f_275(0, v327:1, 3 + v327:1, 3, 0, 1, 4) :|: v329:0 > 0 && v332:0 > -2 && v327:1 > 0 19.75/6.39 f_275(2 + v332:0, v327:0, v328:0, 3, 0, 1, 4) -> f_423(0, v327:0, v328:0, v329:0, 3 + v329:0, 2 + v332:0, v332:0, 1, 3, 2, 4) :|: v329:0 > 0 && v332:0 > -2 19.75/6.39 f_423(0, v327:0, v328:0, v329:0, v330:0, v326:0, v332:0, 1, 3, 2, 4) -> f_275(0, v327:1, 3 + v327:1, 3, 0, 1, 4) :|: v327:1 > 0 19.75/6.39 f_275(2 + v332:0, v327:0, v328:0, 3, 0, 1, 4) -> f_275(v332:0, v327:1, 3 + v327:1, 3, 0, 1, 4) :|: v329:0 > 0 && v332:0 > -2 && v327:1 > 0 19.75/6.39 f_275(2 + v332:0, v327:0, v328:0, 3, 0, 1, 4) -> f_275(-1, v327:1, 3 + v327:1, 3, 0, 1, 4) :|: v329:0 > 0 && v332:0 > -2 && v327:1 > 0 19.75/6.39 Filtered unneeded arguments: 19.75/6.39 f_275(x1, x2, x3, x4, x5, x6, x7) -> f_275(x1) 19.75/6.39 Removed division, modulo operations, cleaned up constraints. Obtained 5 rules.P rules: 19.75/6.39 f_275(sum~cons_2~v332:0) -> f_275(0) :|: v332:0 > -2 && sum~cons_2~v332:0 = 2 + v332:0 19.75/6.39 f_275(sum~cons_2~v332:0) -> f_423(0, v327:0, v328:0, v329:0, 3 + v329:0, 2 + v332:0, v332:0, 1, 3, 2, 4) :|: v329:0 > 0 && v332:0 > -2 && sum~cons_2~v332:0 = 2 + v332:0 19.75/6.39 f_423(cons_0, v327:0, v328:0, v329:0, v330:0, v326:0, v332:0, cons_1, cons_3, cons_2, cons_4) -> f_275(0) :|: TRUE && cons_0 = 0 && cons_1 = 1 && cons_3 = 3 && cons_2 = 2 && cons_4 = 4 19.75/6.39 f_275(sum~cons_2~v332:0) -> f_275(v332:0) :|: v332:0 > -2 && sum~cons_2~v332:0 = 2 + v332:0 19.75/6.39 f_275(sum~cons_2~v332:0) -> f_275(-1) :|: v332:0 > -2 && sum~cons_2~v332:0 = 2 + v332:0 19.75/6.39 19.75/6.39 ---------------------------------------- 19.75/6.39 19.75/6.39 (9) 19.75/6.39 Obligation: 19.75/6.39 Rules: 19.75/6.39 f_275(sum~cons_2~v332:0) -> f_275(0) :|: v332:0 > -2 && sum~cons_2~v332:0 = 2 + v332:0 19.75/6.39 f_275(x) -> f_423(0, x1, x2, x3, 3 + x3, 2 + x4, x4, 1, 3, 2, 4) :|: x3 > 0 && x4 > -2 && x = 2 + x4 19.75/6.39 f_423(x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15) -> f_275(0) :|: TRUE && x5 = 0 && x12 = 1 && x13 = 3 && x14 = 2 && x15 = 4 19.75/6.39 f_275(x16) -> f_275(x17) :|: x17 > -2 && x16 = 2 + x17 19.75/6.39 f_275(x18) -> f_275(-1) :|: x19 > -2 && x18 = 2 + x19 19.75/6.39 19.75/6.39 ---------------------------------------- 19.75/6.39 19.75/6.39 (10) IRS2T2 (EQUIVALENT) 19.75/6.39 Transformed input IRS into an integer transition system.Used the following mapping from defined symbols to location IDs: 19.75/6.39 19.75/6.39 (f_275_11,1) 19.75/6.39 (f_423_11,2) 19.75/6.39 19.75/6.39 ---------------------------------------- 19.75/6.39 19.75/6.39 (11) 19.75/6.39 Obligation: 19.75/6.39 START: 0; 19.75/6.39 19.75/6.39 FROM: 0; 19.75/6.39 TO: 1; 19.75/6.39 19.75/6.39 FROM: 0; 19.75/6.39 TO: 2; 19.75/6.39 19.75/6.39 FROM: 1; 19.75/6.39 oldX0 := x0; 19.75/6.39 oldX1 := x1; 19.75/6.39 oldX2 := x2; 19.75/6.39 oldX3 := x3; 19.75/6.39 oldX4 := x4; 19.75/6.39 oldX5 := x5; 19.75/6.39 oldX6 := x6; 19.75/6.39 oldX7 := x7; 19.75/6.39 oldX8 := x8; 19.75/6.39 oldX9 := x9; 19.75/6.39 oldX10 := x10; 19.75/6.39 oldX21 := oldX0 - 2; 19.75/6.39 oldX11 := nondet(); 19.75/6.39 oldX12 := nondet(); 19.75/6.39 oldX13 := nondet(); 19.75/6.39 oldX14 := nondet(); 19.75/6.39 oldX15 := nondet(); 19.75/6.39 oldX16 := nondet(); 19.75/6.39 oldX17 := nondet(); 19.75/6.39 oldX18 := nondet(); 19.75/6.39 oldX19 := nondet(); 19.75/6.39 oldX20 := nondet(); 19.75/6.39 assume(oldX21 > -2 && oldX0 = 2 + oldX21); 19.75/6.39 x0 := 0; 19.75/6.39 x1 := oldX11; 19.75/6.39 x2 := oldX12; 19.75/6.39 x3 := oldX13; 19.75/6.39 x4 := oldX14; 19.75/6.39 x5 := oldX15; 19.75/6.39 x6 := oldX16; 19.75/6.39 x7 := oldX17; 19.75/6.39 x8 := oldX18; 19.75/6.39 x9 := oldX19; 19.75/6.39 x10 := oldX20; 19.75/6.39 TO: 1; 19.75/6.39 19.75/6.39 FROM: 1; 19.75/6.39 oldX0 := x0; 19.75/6.39 oldX1 := x1; 19.75/6.39 oldX2 := x2; 19.75/6.39 oldX3 := x3; 19.75/6.39 oldX4 := x4; 19.75/6.39 oldX5 := x5; 19.75/6.39 oldX6 := x6; 19.75/6.39 oldX7 := x7; 19.75/6.39 oldX8 := x8; 19.75/6.39 oldX9 := x9; 19.75/6.39 oldX10 := x10; 19.75/6.39 oldX14 := oldX0 - 2; 19.75/6.39 oldX11 := nondet(); 19.75/6.39 oldX12 := nondet(); 19.75/6.39 oldX13 := nondet(); 19.75/6.39 assume(oldX13 > 0 && oldX14 > -2 && oldX0 = 2 + oldX14); 19.75/6.39 x0 := 0; 19.75/6.39 x1 := oldX11; 19.75/6.39 x2 := oldX12; 19.75/6.39 x3 := oldX13; 19.75/6.39 x4 := 3 + oldX13; 19.75/6.39 x5 := 2 + oldX14; 19.75/6.39 x6 := oldX0 - 2; 19.75/6.39 x7 := 1; 19.75/6.39 x8 := 3; 19.75/6.39 x9 := 2; 19.75/6.39 x10 := 4; 19.75/6.39 TO: 2; 19.75/6.39 19.75/6.39 FROM: 2; 19.75/6.39 oldX0 := x0; 19.75/6.39 oldX1 := x1; 19.75/6.39 oldX2 := x2; 19.75/6.39 oldX3 := x3; 19.75/6.39 oldX4 := x4; 19.75/6.39 oldX5 := x5; 19.75/6.39 oldX6 := x6; 19.75/6.39 oldX7 := x7; 19.75/6.39 oldX8 := x8; 19.75/6.39 oldX9 := x9; 19.75/6.39 oldX10 := x10; 19.75/6.39 oldX11 := nondet(); 19.75/6.39 oldX12 := nondet(); 19.75/6.39 oldX13 := nondet(); 19.75/6.39 oldX14 := nondet(); 19.75/6.39 oldX15 := nondet(); 19.75/6.39 oldX16 := nondet(); 19.75/6.39 oldX17 := nondet(); 19.75/6.39 oldX18 := nondet(); 19.75/6.39 oldX19 := nondet(); 19.75/6.39 oldX20 := nondet(); 19.75/6.39 assume(0 = 0 && oldX0 = 0 && oldX7 = 1 && oldX8 = 3 && oldX9 = 2 && oldX10 = 4); 19.75/6.39 x0 := 0; 19.75/6.39 x1 := oldX11; 19.75/6.39 x2 := oldX12; 19.75/6.39 x3 := oldX13; 19.75/6.39 x4 := oldX14; 19.75/6.39 x5 := oldX15; 19.75/6.39 x6 := oldX16; 19.75/6.39 x7 := oldX17; 19.75/6.39 x8 := oldX18; 19.75/6.39 x9 := oldX19; 19.75/6.39 x10 := oldX20; 19.75/6.39 TO: 1; 19.75/6.39 19.75/6.39 FROM: 1; 19.75/6.39 oldX0 := x0; 19.75/6.39 oldX1 := x1; 19.75/6.39 oldX2 := x2; 19.75/6.39 oldX3 := x3; 19.75/6.39 oldX4 := x4; 19.75/6.39 oldX5 := x5; 19.75/6.39 oldX6 := x6; 19.75/6.39 oldX7 := x7; 19.75/6.39 oldX8 := x8; 19.75/6.39 oldX9 := x9; 19.75/6.39 oldX10 := x10; 19.75/6.39 oldX11 := oldX0 - 2; 19.75/6.39 oldX12 := nondet(); 19.75/6.39 oldX13 := nondet(); 19.75/6.39 oldX14 := nondet(); 19.75/6.39 oldX15 := nondet(); 19.75/6.39 oldX16 := nondet(); 19.75/6.39 oldX17 := nondet(); 19.75/6.39 oldX18 := nondet(); 19.75/6.39 oldX19 := nondet(); 19.75/6.39 oldX20 := nondet(); 19.75/6.39 oldX21 := nondet(); 19.75/6.39 assume(oldX11 > -2 && oldX0 = 2 + oldX11); 19.75/6.39 x0 := oldX0 - 2; 19.75/6.39 x1 := oldX12; 19.75/6.39 x2 := oldX13; 19.75/6.39 x3 := oldX14; 19.75/6.39 x4 := oldX15; 19.75/6.39 x5 := oldX16; 19.75/6.39 x6 := oldX17; 19.75/6.39 x7 := oldX18; 19.75/6.39 x8 := oldX19; 19.75/6.39 x9 := oldX20; 19.75/6.39 x10 := oldX21; 19.75/6.39 TO: 1; 19.75/6.39 19.75/6.39 FROM: 1; 19.75/6.39 oldX0 := x0; 19.75/6.39 oldX1 := x1; 19.75/6.39 oldX2 := x2; 19.75/6.39 oldX3 := x3; 19.75/6.39 oldX4 := x4; 19.75/6.39 oldX5 := x5; 19.75/6.39 oldX6 := x6; 19.75/6.39 oldX7 := x7; 19.75/6.39 oldX8 := x8; 19.75/6.39 oldX9 := x9; 19.75/6.39 oldX10 := x10; 19.75/6.39 oldX21 := oldX0 - 2; 19.75/6.39 oldX11 := nondet(); 19.75/6.39 oldX12 := nondet(); 19.75/6.39 oldX13 := nondet(); 19.75/6.39 oldX14 := nondet(); 19.75/6.39 oldX15 := nondet(); 19.75/6.39 oldX16 := nondet(); 19.75/6.39 oldX17 := nondet(); 19.75/6.39 oldX18 := nondet(); 19.75/6.39 oldX19 := nondet(); 19.75/6.39 oldX20 := nondet(); 19.75/6.39 assume(oldX21 > -2 && oldX0 = 2 + oldX21); 19.75/6.39 x0 := -1; 19.75/6.39 x1 := oldX11; 19.75/6.39 x2 := oldX12; 19.75/6.39 x3 := oldX13; 19.75/6.39 x4 := oldX14; 19.75/6.39 x5 := oldX15; 19.75/6.39 x6 := oldX16; 19.75/6.39 x7 := oldX17; 19.75/6.39 x8 := oldX18; 19.75/6.39 x9 := oldX19; 19.75/6.39 x10 := oldX20; 19.75/6.39 TO: 1; 19.75/6.39 19.75/6.39 19.75/6.39 ---------------------------------------- 19.75/6.39 19.75/6.39 (12) T2 (EQUIVALENT) 19.75/6.39 Initially, performed program simplifications using lexicographic rank functions: 19.75/6.39 * Removed transitions 2, 5, 6, 7, 8, 20, 22, 23 using the following rank functions: 19.75/6.39 - Rank function 1: 19.75/6.39 RF for loc. 6: 6*x0 19.75/6.39 RF for loc. 8: -1+6*x0 19.75/6.39 RF for loc. 12: x10 19.75/6.39 Bound for (chained) transitions 5: 5 19.75/6.39 Bound for (chained) transitions 6, 20: 5 19.75/6.39 Bound for (chained) transitions 7: 5 19.75/6.39 Bound for (chained) transitions 8: 5 19.75/6.39 Bound for (chained) transitions 22: 4 19.75/6.39 Bound for (chained) transitions 23: 4 19.75/6.39 - Rank function 2: 19.75/6.39 RF for loc. 6: 0 19.75/6.39 RF for loc. 8: -1 19.75/6.39 Bound for (chained) transitions 2: 0 19.75/6.39 19.75/6.39 ---------------------------------------- 19.75/6.39 19.75/6.39 (13) 19.75/6.39 YES 19.75/6.39 19.75/6.39 ---------------------------------------- 19.75/6.39 19.75/6.39 (14) 19.75/6.39 Obligation: 19.75/6.39 SCC 19.75/6.39 ---------------------------------------- 19.75/6.39 19.75/6.39 (15) SCC2IRS (SOUND) 19.75/6.39 Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: 19.75/6.39 Generated rules. Obtained 17 rulesP rules: 19.75/6.39 f_244(v224, v242, v225, v226, v227, v228, v243, 0, v230, 3, 1, 4) -> f_247(v224, v242, v273, v225, v226, v227, v228, v243, v274, 0, v230, 3, 1, 4) :|: 1 <= v273 && v274 = 3 + v273 && 4 <= v274 19.75/6.39 f_247(v224, v242, v273, v225, v226, v227, v228, v243, v274, 0, v230, 3, 1, 4) -> f_249(v224, v242, v273, v225, v226, v227, v228, v243, v274, 0, v230, 3, 1, 4) :|: TRUE 19.75/6.39 f_249(v224, v242, v273, v225, v226, v227, v228, v243, v274, 0, v230, 3, 1, 4) -> f_251(v224, v242, v273, v225, v226, v227, v228, v243, v274, 0, v230, 3, 1, 4) :|: 0 = 0 19.75/6.39 f_251(v224, v242, v273, v225, v226, v227, v228, v243, v274, 0, v230, 3, 1, 4) -> f_254(v224, v242, v273, v225, v226, v227, v228, v243, v274, 0, v230, 3, 1, 4) :|: 0 < v224 19.75/6.39 f_254(v224, v242, v273, v225, v226, v227, v228, v243, v274, 0, v230, 3, 1, 4) -> f_256(v224, v242, v273, 0, v225, v226, v227, v228, v243, v274, v230, 3, 1, 4) :|: 0 = 0 19.75/6.39 f_256(v224, v242, v273, 0, v225, v226, v227, v228, v243, v274, v230, 3, 1, 4) -> f_260(v224, v242, v273, 0, v225, v226, v227, v228, v243, v274, v230, 3, 1, 4) :|: TRUE 19.75/6.39 f_260(v224, v242, v273, 0, v225, v226, v227, v228, v243, v274, v230, 3, 1, 4) -> f_263(v224, v242, v273, 0, v225, v226, v227, v228, v243, v274, v230, 3, 1, 4) :|: 0 = 0 19.75/6.39 f_263(v224, v242, v273, 0, v225, v226, v227, v228, v243, v274, v230, 3, 1, 4) -> f_266(v224, v225, v226, v227, v228, v242, v243, v273, v274, 0, v230, 3, 1, 4) :|: 0 = 0 19.75/6.39 f_266(v224, v225, v226, v227, v228, v242, v243, v273, v274, 0, v230, 3, 1, 4) -> f_414(v224, 1, v225, v226, v227, v228, v242, v243, v273, v274, 0, v230, 3, 4) :|: TRUE 19.75/6.39 f_266(v224, v225, v226, v227, v228, v242, v243, v273, v274, 0, v230, 3, 1, 4) -> f_448(v224, 1, v225, v226, v227, v228, v242, v243, v273, v274, 0, v230, 3, 4) :|: TRUE 19.75/6.39 f_414(v224, 1, v225, v226, v227, v228, v242, v243, v273, v274, 0, v230, 3, 4) -> f_418(v224, v242, v273, 0, 1, v225, v226, v227, v228, v243, v274, v230, 3, 4) :|: 0 = 0 19.75/6.39 f_418(v224, v242, v273, 0, 1, v225, v226, v227, v228, v243, v274, v230, 3, 4) -> f_420(v224, v242, v273, 0, 1, v225, v226, v227, v228, v243, v274, v230, 3, 4) :|: 0 = 0 19.75/6.39 f_420(v224, v242, v273, 0, 1, v225, v226, v227, v228, v243, v274, v230, 3, 4) -> f_422(0, v225, v226, v227, v228, v242, v243, v273, v274, v230, v224, 1, 3, 4) :|: 0 = 0 19.75/6.39 f_422(0, v225, v226, v227, v228, v242, v243, v273, v274, v230, v224, 1, 3, 4) -> f_424(0, v225, v226, v227, v228, v242, v243, v273, v274, v230, v224, 3, 1, 4) :|: TRUE 19.75/6.39 f_424(0, v225, v226, v227, v228, v242, v243, v273, v274, v230, v224, 3, 1, 4) -> f_243(0, v225, v226, v227, v228, 0, v230, 3, 1, 4) :|: TRUE 19.75/6.39 f_243(v224, v225, v226, v227, v228, 0, v230, 3, 1, 4) -> f_244(v224, v242, v225, v226, v227, v228, v243, 0, v230, 3, 1, 4) :|: 1 <= v242 && v243 = 3 + v242 && 4 <= v243 19.75/6.39 f_448(v224, 1, v225, v226, v227, v228, v242, v243, v273, v274, 0, v230, 3, 4) -> f_414(v224, 1, v225, v226, v227, v228, v242, v243, v273, v274, 0, v230, 3, 4) :|: TRUE 19.75/6.39 Combined rules. Obtained 1 rulesP rules: 19.75/6.39 f_244(v224:0, v242:0, v225:0, v226:0, v227:0, v228:0, v243:0, 0, v230:0, 3, 1, 4) -> f_244(0, v242:1, v225:0, v226:0, v227:0, v228:0, 3 + v242:1, 0, v230:0, 3, 1, 4) :|: v273:0 > 0 && v224:0 > 0 && v242:1 > 0 19.75/6.39 Filtered unneeded arguments: 19.75/6.39 f_244(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12) -> f_244(x1) 19.75/6.39 Removed division, modulo operations, cleaned up constraints. Obtained 1 rules.P rules: 19.75/6.39 f_244(v224:0) -> f_244(0) :|: v224:0 > 0 19.75/6.39 19.75/6.39 ---------------------------------------- 19.75/6.39 19.75/6.39 (16) 19.75/6.39 Obligation: 19.75/6.39 Rules: 19.75/6.39 f_244(v224:0) -> f_244(0) :|: v224:0 > 0 19.75/6.39 19.75/6.39 ---------------------------------------- 19.75/6.39 19.75/6.39 (17) TerminationGraphProcessor (EQUIVALENT) 19.75/6.39 Constructed the termination graph and obtained no non-trivial SCC(s). 19.75/6.39 19.75/6.39 ---------------------------------------- 19.75/6.39 19.75/6.39 (18) 19.75/6.39 YES 19.75/6.42 EOF