/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, 178 ms] (2) LLVM problem (3) LLVMToTerminationGraphProof [EQUIVALENT, 2171 ms] (4) LLVM Symbolic Execution Graph (5) SymbolicExecutionGraphToSCCProof [SOUND, 0 ms] (6) AND (7) LLVM Symbolic Execution SCC (8) SCC2IRS [SOUND, 68 ms] (9) IntTRS (10) IRS2T2 [EQUIVALENT, 0 ms] (11) T2IntSys (12) T2 [EQUIVALENT, 1154 ms] (13) YES (14) LLVM Symbolic Execution SCC (15) SCC2IRS [SOUND, 14 ms] (16) IntTRS (17) TerminationGraphProcessor [EQUIVALENT, 7 ms] (18) 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: true visibilityType: DEFAULT callingConvention: ccc *BasicFunctionTypename: "rec1" linkageType: EXTERNALLY_VISIBLE returnParam: i32 parameters: (i i32) variableLength: false visibilityType: DEFAULT callingConvention: ccc 0: %1 = alloca i32, align 4 %2 = alloca i32, align 4 store %i, %2 %3 = load %2 %4 = icmp sle %3 0 br %4, %5, %6 5: store 0, %1 br %14 6: %7 = load %2 %8 = sub %7 2 %9 = call i32 @rec1(i32 %8) %10 = sub %9 1 %11 = call i32 @rec1(i32 %10) %12 = call i32 @rec1(i32 %11) %13 = add %12 1 store %13, %1 br %14 14: %15 = load %1 ret %15 *BasicFunctionTypename: "rec2" linkageType: EXTERNALLY_VISIBLE returnParam: i32 parameters: (j i32) variableLength: false visibilityType: DEFAULT callingConvention: ccc 0: %1 = alloca i32, align 4 %2 = alloca i32, align 4 store %j, %2 %3 = load %2 %4 = icmp sle %3 0 br %4, %5, %6 5: store 0, %1 br %12 6: %7 = load %2 %8 = call i32 @rec1(i32 %7) %9 = sub %8 1 %10 = call i32 @rec2(i32 %9) %11 = sub %10 1 store %11, %1 br %12 12: %13 = load %1 ret %13 *BasicFunctionTypename: "main" linkageType: EXTERNALLY_VISIBLE returnParam: i32 parameters: () variableLength: false visibilityType: DEFAULT callingConvention: ccc 0: %1 = alloca i32, align 4 %x = alloca i32, align 4 store 0, %1 %2 = call i32 (...)* @__VERIFIER_nondet_int() store %2, %x %3 = load %x %4 = call i32 @rec2(i32 %3) %5 = load %1 ret %5 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 36 rulesP rules: 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 f_277(v326, v327, v329, v328, v330, 3, 0, 1, 4) -> f_278(v326, v327, v329, v328, v330, 3, 0, 1, 4) :|: TRUE f_278(v326, v327, v329, v328, v330, 3, 0, 1, 4) -> f_279(v326, v327, v329, v328, v330, 3, 0, 1, 4) :|: 0 = 0 f_279(v326, v327, v329, v328, v330, 3, 0, 1, 4) -> f_281(v326, v327, v329, v328, v330, 3, 1, 4) :|: 0 < v326 f_281(v326, v327, v329, v328, v330, 3, 1, 4) -> f_283(v326, v327, v329, 0, v328, v330, 3, 1, 4) :|: 0 = 0 f_283(v326, v327, v329, 0, v328, v330, 3, 1, 4) -> f_285(v326, v327, v329, 0, v328, v330, 3, 1, 4) :|: TRUE f_285(v326, v327, v329, 0, v328, v330, 3, 1, 4) -> f_287(v326, v327, v329, 0, v328, v330, 3, 1, 4) :|: 0 = 0 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 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 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 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 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 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 f_293(v332, v327, v328, v329, v330, v326, 3, 2, 1, 4, 0) -> f_272(v332, 0, 1) :|: TRUE f_272(v326, 0, 1) -> f_275(v326, v327, v328, 3, 0, 1, 4) :|: 1 <= v327 && v328 = 3 + v327 && 4 <= v328 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 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 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 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 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 f_298(-1, v327, v328, v329, v330, v326, 3, 1, 2, 4) -> f_272(-1, 0, 1) :|: TRUE 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 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 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 f_302(0, v327, v328, v329, v330, v326, 3, 1, 2, 4) -> f_272(0, 0, 1) :|: TRUE 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 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 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 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 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 f_425(0, v327, v328, v329, v330, v326, 3, 1, 4) -> f_272(0, 0, 1) :|: TRUE 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 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 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 f_434(0, v327, v328, v329, v330, v326, 3, 1, 4) -> f_272(0, 0, 1) :|: TRUE 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 Combined rules. Obtained 5 rulesP rules: 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 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 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 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 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 Filtered unneeded arguments: f_275(x1, x2, x3, x4, x5, x6, x7) -> f_275(x1) Removed division, modulo operations, cleaned up constraints. Obtained 5 rules.P rules: f_275(sum~cons_2~v332:0) -> f_275(0) :|: v332:0 > -2 && sum~cons_2~v332:0 = 2 + v332:0 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 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 f_275(sum~cons_2~v332:0) -> f_275(v332:0) :|: v332:0 > -2 && sum~cons_2~v332:0 = 2 + v332:0 f_275(sum~cons_2~v332:0) -> f_275(-1) :|: v332:0 > -2 && sum~cons_2~v332:0 = 2 + v332:0 ---------------------------------------- (9) Obligation: Rules: f_275(sum~cons_2~v332:0) -> f_275(0) :|: v332:0 > -2 && sum~cons_2~v332:0 = 2 + v332:0 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 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 f_275(x16) -> f_275(x17) :|: x17 > -2 && x16 = 2 + x17 f_275(x18) -> f_275(-1) :|: x19 > -2 && x18 = 2 + x19 ---------------------------------------- (10) IRS2T2 (EQUIVALENT) Transformed input IRS into an integer transition system.Used the following mapping from defined symbols to location IDs: (f_275_11,1) (f_423_11,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 := x5; oldX6 := x6; oldX7 := x7; oldX8 := x8; oldX9 := x9; oldX10 := x10; oldX21 := oldX0 - 2; oldX11 := nondet(); oldX12 := nondet(); oldX13 := nondet(); oldX14 := nondet(); oldX15 := nondet(); oldX16 := nondet(); oldX17 := nondet(); oldX18 := nondet(); oldX19 := nondet(); oldX20 := nondet(); assume(oldX21 > -2 && oldX0 = 2 + oldX21); x0 := 0; x1 := oldX11; x2 := oldX12; x3 := oldX13; x4 := oldX14; x5 := oldX15; x6 := oldX16; x7 := oldX17; x8 := oldX18; x9 := oldX19; x10 := oldX20; TO: 1; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := x4; oldX5 := x5; oldX6 := x6; oldX7 := x7; oldX8 := x8; oldX9 := x9; oldX10 := x10; oldX14 := oldX0 - 2; oldX11 := nondet(); oldX12 := nondet(); oldX13 := nondet(); assume(oldX13 > 0 && oldX14 > -2 && oldX0 = 2 + oldX14); x0 := 0; x1 := oldX11; x2 := oldX12; x3 := oldX13; x4 := 3 + oldX13; x5 := 2 + oldX14; x6 := oldX0 - 2; x7 := 1; x8 := 3; x9 := 2; x10 := 4; TO: 2; FROM: 2; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := x4; oldX5 := x5; oldX6 := x6; oldX7 := x7; oldX8 := x8; oldX9 := x9; oldX10 := x10; oldX11 := nondet(); oldX12 := nondet(); oldX13 := nondet(); oldX14 := nondet(); oldX15 := nondet(); oldX16 := nondet(); oldX17 := nondet(); oldX18 := nondet(); oldX19 := nondet(); oldX20 := nondet(); assume(0 = 0 && oldX0 = 0 && oldX7 = 1 && oldX8 = 3 && oldX9 = 2 && oldX10 = 4); x0 := 0; x1 := oldX11; x2 := oldX12; x3 := oldX13; x4 := oldX14; x5 := oldX15; x6 := oldX16; x7 := oldX17; x8 := oldX18; x9 := oldX19; x10 := oldX20; TO: 1; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := x4; oldX5 := x5; oldX6 := x6; oldX7 := x7; oldX8 := x8; oldX9 := x9; oldX10 := x10; oldX11 := oldX0 - 2; oldX12 := nondet(); oldX13 := nondet(); oldX14 := nondet(); oldX15 := nondet(); oldX16 := nondet(); oldX17 := nondet(); oldX18 := nondet(); oldX19 := nondet(); oldX20 := nondet(); oldX21 := nondet(); assume(oldX11 > -2 && oldX0 = 2 + oldX11); x0 := oldX0 - 2; x1 := oldX12; x2 := oldX13; x3 := oldX14; x4 := oldX15; x5 := oldX16; x6 := oldX17; x7 := oldX18; x8 := oldX19; x9 := oldX20; x10 := oldX21; TO: 1; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := x4; oldX5 := x5; oldX6 := x6; oldX7 := x7; oldX8 := x8; oldX9 := x9; oldX10 := x10; oldX21 := oldX0 - 2; oldX11 := nondet(); oldX12 := nondet(); oldX13 := nondet(); oldX14 := nondet(); oldX15 := nondet(); oldX16 := nondet(); oldX17 := nondet(); oldX18 := nondet(); oldX19 := nondet(); oldX20 := nondet(); assume(oldX21 > -2 && oldX0 = 2 + oldX21); x0 := -1; x1 := oldX11; x2 := oldX12; x3 := oldX13; x4 := oldX14; x5 := oldX15; x6 := oldX16; x7 := oldX17; x8 := oldX18; x9 := oldX19; x10 := oldX20; TO: 1; ---------------------------------------- (12) T2 (EQUIVALENT) Initially, performed program simplifications using lexicographic rank functions: * Removed transitions 2, 5, 6, 7, 8, 20, 22, 23 using the following rank functions: - Rank function 1: RF for loc. 6: 6*x0 RF for loc. 8: -1+6*x0 RF for loc. 12: x10 Bound for (chained) transitions 5: 5 Bound for (chained) transitions 6, 20: 5 Bound for (chained) transitions 7: 5 Bound for (chained) transitions 8: 5 Bound for (chained) transitions 22: 4 Bound for (chained) transitions 23: 4 - Rank function 2: RF for loc. 6: 0 RF for loc. 8: -1 Bound for (chained) transitions 2: 0 ---------------------------------------- (13) YES ---------------------------------------- (14) Obligation: SCC ---------------------------------------- (15) SCC2IRS (SOUND) Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: Generated rules. Obtained 17 rulesP rules: 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 Combined rules. Obtained 1 rulesP rules: 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 Filtered unneeded arguments: f_244(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12) -> f_244(x1) Removed division, modulo operations, cleaned up constraints. Obtained 1 rules.P rules: f_244(v224:0) -> f_244(0) :|: v224:0 > 0 ---------------------------------------- (16) Obligation: Rules: f_244(v224:0) -> f_244(0) :|: v224:0 > 0 ---------------------------------------- (17) TerminationGraphProcessor (EQUIVALENT) Constructed the termination graph and obtained no non-trivial SCC(s). ---------------------------------------- (18) YES