30.22/10.01 YES 30.22/10.02 proof of /export/starexec/sandbox2/benchmark/theBenchmark.c 30.22/10.02 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 30.22/10.02 30.22/10.02 30.22/10.02 Termination of the given C Problem could be proven: 30.22/10.02 30.22/10.02 (0) C Problem 30.22/10.02 (1) CToLLVMProof [EQUIVALENT, 174 ms] 30.22/10.02 (2) LLVM problem 30.22/10.02 (3) LLVMToTerminationGraphProof [EQUIVALENT, 5158 ms] 30.22/10.02 (4) LLVM Symbolic Execution Graph 30.22/10.02 (5) SymbolicExecutionGraphToSCCProof [SOUND, 0 ms] 30.22/10.02 (6) AND 30.22/10.02 (7) LLVM Symbolic Execution SCC 30.22/10.02 (8) SCC2IRS [SOUND, 63 ms] 30.22/10.02 (9) IntTRS 30.22/10.02 (10) IntTRSCompressionProof [EQUIVALENT, 0 ms] 30.22/10.02 (11) IntTRS 30.22/10.02 (12) PolynomialOrderProcessor [EQUIVALENT, 8 ms] 30.22/10.02 (13) YES 30.22/10.02 (14) LLVM Symbolic Execution SCC 30.22/10.02 (15) SCC2IRS [SOUND, 73 ms] 30.22/10.02 (16) IntTRS 30.22/10.02 (17) IntTRSCompressionProof [EQUIVALENT, 0 ms] 30.22/10.02 (18) IntTRS 30.22/10.02 (19) RankingReductionPairProof [EQUIVALENT, 7 ms] 30.22/10.02 (20) YES 30.22/10.02 30.22/10.02 30.22/10.02 ---------------------------------------- 30.22/10.02 30.22/10.02 (0) 30.22/10.02 Obligation: 30.22/10.02 c file /export/starexec/sandbox2/benchmark/theBenchmark.c 30.41/10.02 ---------------------------------------- 30.41/10.02 30.41/10.02 (1) CToLLVMProof (EQUIVALENT) 30.41/10.02 Compiled c-file /export/starexec/sandbox2/benchmark/theBenchmark.c to LLVM. 30.41/10.02 ---------------------------------------- 30.41/10.02 30.41/10.02 (2) 30.41/10.02 Obligation: 30.41/10.02 LLVM Problem 30.41/10.02 30.41/10.02 Aliases: 30.41/10.02 30.41/10.02 Data layout: 30.41/10.02 30.41/10.02 "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" 30.41/10.02 30.41/10.02 Machine: 30.41/10.02 30.41/10.02 "x86_64-pc-linux-gnu" 30.41/10.02 30.41/10.02 Type definitions: 30.41/10.02 30.41/10.02 Global variables: 30.41/10.02 30.41/10.02 Function declarations and definitions: 30.41/10.02 30.41/10.02 *BasicFunctionTypename: "__VERIFIER_nondet_int" returnParam: i32 parameters: () variableLength: false visibilityType: DEFAULT callingConvention: ccc 30.41/10.02 *BasicFunctionTypename: "f" linkageType: EXTERNALLY_VISIBLE returnParam: i32 parameters: (a i32, b i32) variableLength: false visibilityType: DEFAULT callingConvention: ccc 30.41/10.02 0: 30.41/10.02 %1 = alloca i32, align 4 30.41/10.02 %2 = alloca i32, align 4 30.41/10.02 %3 = alloca i32, align 4 30.41/10.02 store %a, %2 30.41/10.02 store %b, %3 30.41/10.02 %4 = load %3 30.41/10.02 %5 = icmp eq %4 0 30.41/10.02 br %5, %6, %9 30.41/10.02 6: 30.41/10.02 %7 = load %2 30.41/10.02 %8 = call i32 @g(i32 %7, i32 0) 30.41/10.02 store %8, %1 30.41/10.02 br %15 30.41/10.02 9: 30.41/10.02 %10 = load %2 30.41/10.02 %11 = add 1 %10 30.41/10.02 %12 = load %3 30.41/10.02 %13 = sub %12 1 30.41/10.02 %14 = call i32 @f(i32 %11, i32 %13) 30.41/10.02 store %14, %1 30.41/10.02 br %15 30.41/10.02 15: 30.41/10.02 %16 = load %1 30.41/10.02 ret %16 30.41/10.02 30.41/10.02 *BasicFunctionTypename: "g" linkageType: EXTERNALLY_VISIBLE returnParam: i32 parameters: (c i32, d i32) variableLength: false visibilityType: DEFAULT callingConvention: ccc 30.41/10.02 0: 30.41/10.02 %1 = alloca i32, align 4 30.41/10.02 %2 = alloca i32, align 4 30.41/10.02 %3 = alloca i32, align 4 30.41/10.02 store %c, %2 30.41/10.02 store %d, %3 30.41/10.02 %4 = load %2 30.41/10.02 %5 = icmp eq %4 0 30.41/10.02 br %5, %6, %8 30.41/10.02 6: 30.41/10.02 %7 = load %3 30.41/10.02 store %7, %1 30.41/10.02 br %14 30.41/10.02 8: 30.41/10.02 %9 = load %2 30.41/10.02 %10 = sub %9 1 30.41/10.02 %11 = load %3 30.41/10.02 %12 = add 1 %11 30.41/10.02 %13 = call i32 @g(i32 %10, i32 %12) 30.41/10.02 store %13, %1 30.41/10.02 br %14 30.41/10.02 14: 30.41/10.02 %15 = load %1 30.41/10.02 ret %15 30.41/10.02 30.41/10.02 *BasicFunctionTypename: "main" linkageType: EXTERNALLY_VISIBLE returnParam: i32 parameters: () variableLength: false visibilityType: DEFAULT callingConvention: ccc 30.41/10.02 0: 30.41/10.02 %1 = alloca i32, align 4 30.41/10.02 %a = alloca i32, align 4 30.41/10.02 %b = alloca i32, align 4 30.41/10.02 store 0, %1 30.41/10.02 %2 = call i32 @__VERIFIER_nondet_int() 30.41/10.02 store %2, %a 30.41/10.02 %3 = call i32 @__VERIFIER_nondet_int() 30.41/10.02 store %3, %b 30.41/10.02 %4 = load %a 30.41/10.02 %5 = icmp sge %4 0 30.41/10.02 br %5, %6, %13 30.41/10.02 6: 30.41/10.02 %7 = load %b 30.41/10.02 %8 = icmp sge %7 0 30.41/10.02 br %8, %9, %13 30.41/10.02 9: 30.41/10.02 %10 = load %a 30.41/10.02 %11 = load %b 30.41/10.02 %12 = call i32 @f(i32 %10, i32 %11) 30.41/10.02 br %13 30.41/10.02 13: 30.41/10.02 ret 0 30.41/10.02 30.41/10.02 30.41/10.02 Analyze Termination of all function calls matching the pattern: 30.41/10.02 main() 30.41/10.02 ---------------------------------------- 30.41/10.02 30.41/10.02 (3) LLVMToTerminationGraphProof (EQUIVALENT) 30.41/10.02 Constructed symbolic execution graph for LLVM program and proved memory safety. 30.41/10.02 ---------------------------------------- 30.41/10.02 30.41/10.02 (4) 30.41/10.02 Obligation: 30.41/10.02 SE Graph 30.41/10.02 ---------------------------------------- 30.41/10.02 30.41/10.02 (5) SymbolicExecutionGraphToSCCProof (SOUND) 30.41/10.02 Splitted symbolic execution graph to 2 SCCs. 30.41/10.02 ---------------------------------------- 30.41/10.02 30.41/10.02 (6) 30.41/10.02 Complex Obligation (AND) 30.41/10.02 30.41/10.02 ---------------------------------------- 30.41/10.02 30.41/10.02 (7) 30.41/10.02 Obligation: 30.41/10.02 SCC 30.41/10.02 ---------------------------------------- 30.41/10.02 30.41/10.02 (8) SCC2IRS (SOUND) 30.41/10.02 Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: 30.41/10.02 Generated rules. Obtained 16 rulesP rules: 30.41/10.02 f_424(v319, v320, v337, v321, v322, v323, v324, v325, v326, v327, v328, v329, v330, v331, v332, v338, 0, v334, v335, v336, 3, 1, 4) -> f_426(v319, v320, v337, v339, v321, v322, v323, v324, v325, v326, v327, v328, v329, v330, v331, v332, v338, v340, 0, v334, v335, v336, 3, 1, 4) :|: 1 <= v339 && v340 = 3 + v339 && 4 <= v340 30.41/10.02 f_426(v319, v320, v337, v339, v321, v322, v323, v324, v325, v326, v327, v328, v329, v330, v331, v332, v338, v340, 0, v334, v335, v336, 3, 1, 4) -> f_427(v319, v320, v337, v339, v341, v321, v322, v323, v324, v325, v326, v327, v328, v329, v330, v331, v332, v338, v340, v342, 0, v334, v335, v336, 3, 1, 4) :|: 1 <= v341 && v342 = 3 + v341 && 4 <= v342 30.41/10.02 f_427(v319, v320, v337, v339, v341, v321, v322, v323, v324, v325, v326, v327, v328, v329, v330, v331, v332, v338, v340, v342, 0, v334, v335, v336, 3, 1, 4) -> f_428(v319, v320, v337, v339, v341, v321, v322, v323, v324, v325, v326, v327, v328, v329, v330, v331, v332, v338, v340, v342, 0, v334, v335, v336, 3, 1, 4) :|: TRUE 30.41/10.02 f_428(v319, v320, v337, v339, v341, v321, v322, v323, v324, v325, v326, v327, v328, v329, v330, v331, v332, v338, v340, v342, 0, v334, v335, v336, 3, 1, 4) -> f_429(v319, v320, v337, v339, v341, v321, v322, v323, v324, v325, v326, v327, v328, v329, v330, v331, v332, v338, v340, v342, 0, v334, v335, v336, 3, 1, 4) :|: TRUE 30.41/10.02 f_429(v319, v320, v337, v339, v341, v321, v322, v323, v324, v325, v326, v327, v328, v329, v330, v331, v332, v338, v340, v342, 0, v334, v335, v336, 3, 1, 4) -> f_430(v319, v320, v337, v339, v341, v321, v322, v323, v324, v325, v326, v327, v328, v329, v330, v331, v332, v338, v340, v342, 0, v334, v335, v336, 3, 1, 4) :|: 0 = 0 30.41/10.02 f_430(v319, v320, v337, v339, v341, v321, v322, v323, v324, v325, v326, v327, v328, v329, v330, v331, v332, v338, v340, v342, 0, v334, v335, v336, 3, 1, 4) -> f_432(v319, v320, v337, v339, v341, v321, v322, v323, v324, v325, v326, v327, v328, v329, v330, v331, v332, v338, v340, v342, 0, v334, v335, v336, 3, 1, 4) :|: v319 != 0 && 1 <= v336 30.41/10.02 f_432(v319, v320, v337, v339, v341, v321, v322, v323, v324, v325, v326, v327, v328, v329, v330, v331, v332, v338, v340, v342, 0, v334, v335, v336, 3, 1, 4) -> f_434(v319, v320, v337, v339, v341, 0, v321, v322, v323, v324, v325, v326, v327, v328, v329, v330, v331, v332, v338, v340, v342, v334, v335, v336, 3, 1, 4) :|: 0 = 0 30.41/10.02 f_434(v319, v320, v337, v339, v341, 0, v321, v322, v323, v324, v325, v326, v327, v328, v329, v330, v331, v332, v338, v340, v342, v334, v335, v336, 3, 1, 4) -> f_436(v319, v320, v337, v339, v341, 0, v321, v322, v323, v324, v325, v326, v327, v328, v329, v330, v331, v332, v338, v340, v342, v334, v335, v336, 3, 1, 4) :|: TRUE 30.41/10.02 f_436(v319, v320, v337, v339, v341, 0, v321, v322, v323, v324, v325, v326, v327, v328, v329, v330, v331, v332, v338, v340, v342, v334, v335, v336, 3, 1, 4) -> f_438(v319, v320, v337, v339, v341, 0, v321, v322, v323, v324, v325, v326, v327, v328, v329, v330, v331, v332, v338, v340, v342, v334, v335, v336, 3, 1, 4) :|: 0 = 0 30.41/10.02 f_438(v319, v320, v337, v339, v341, 0, v321, v322, v323, v324, v325, v326, v327, v328, v329, v330, v331, v332, v338, v340, v342, v334, v335, v336, 3, 1, 4) -> f_440(v319, v320, v337, v339, v341, 0, v346, v321, v322, v323, v324, v325, v326, v327, v328, v329, v330, v331, v332, v338, v340, v342, v334, v335, v336, 3, 1, 4) :|: 1 + v346 = v319 && 0 <= v346 30.41/10.02 f_440(v319, v320, v337, v339, v341, 0, v346, v321, v322, v323, v324, v325, v326, v327, v328, v329, v330, v331, v332, v338, v340, v342, v334, v335, v336, 3, 1, 4) -> f_442(v319, v320, v337, v339, v341, 0, v346, v321, v322, v323, v324, v325, v326, v327, v328, v329, v330, v331, v332, v338, v340, v342, v334, v335, v336, 3, 1, 4) :|: 0 = 0 30.41/10.02 f_442(v319, v320, v337, v339, v341, 0, v346, v321, v322, v323, v324, v325, v326, v327, v328, v329, v330, v331, v332, v338, v340, v342, v334, v335, v336, 3, 1, 4) -> f_444(v319, v320, v337, v339, v341, 0, v346, v347, v321, v322, v323, v324, v325, v326, v327, v328, v329, v330, v331, v332, v338, v340, v342, v334, v335, v336, 3, 1, 4) :|: v347 = 1 + v320 && 1 <= v347 30.41/10.02 f_444(v319, v320, v337, v339, v341, 0, v346, v347, v321, v322, v323, v324, v325, v326, v327, v328, v329, v330, v331, v332, v338, v340, v342, v334, v335, v336, 3, 1, 4) -> f_446(v346, v347, v321, v322, v323, v324, v325, v326, v327, v328, v329, v330, v331, v332, v337, v338, v339, v340, v341, v342, 0, v334, v335, v336, v319, v320, 3, 1, 4) :|: 0 = 0 30.41/10.02 f_446(v346, v347, v321, v322, v323, v324, v325, v326, v327, v328, v329, v330, v331, v332, v337, v338, v339, v340, v341, v342, 0, v334, v335, v336, v319, v320, 3, 1, 4) -> f_448(v346, v347, v321, v322, v323, v324, v325, v326, v327, v328, v329, v330, v331, v332, v337, v338, v339, v340, v341, v342, 0, v334, v335, v336, v319, v320, 3, 1, 4) :|: TRUE 30.41/10.02 f_448(v346, v347, v321, v322, v323, v324, v325, v326, v327, v328, v329, v330, v331, v332, v337, v338, v339, v340, v341, v342, 0, v334, v335, v336, v319, v320, 3, 1, 4) -> f_422(v346, v347, v321, v322, v323, v324, v325, v326, v327, v328, v329, v330, v331, v332, 0, v334, v335, v336, 3, 1, 4) :|: TRUE 30.41/10.02 f_422(v319, v320, v321, v322, v323, v324, v325, v326, v327, v328, v329, v330, v331, v332, 0, v334, v335, v336, 3, 1, 4) -> f_424(v319, v320, v337, v321, v322, v323, v324, v325, v326, v327, v328, v329, v330, v331, v332, v338, 0, v334, v335, v336, 3, 1, 4) :|: 1 <= v337 && v338 = 3 + v337 && 4 <= v338 30.41/10.02 Combined rules. Obtained 1 rulesP rules: 30.41/10.02 f_424(1 + v346:0, v320:0, v337:0, v321:0, v322:0, v323:0, v324:0, v325:0, v326:0, v327:0, v328:0, v329:0, v330:0, v331:0, v332:0, v338:0, 0, v334:0, v335:0, v336:0, 3, 1, 4) -> f_424(v346:0, 1 + v320:0, v337:1, v321:0, v322:0, v323:0, v324:0, v325:0, v326:0, v327:0, v328:0, v329:0, v330:0, v331:0, v332:0, 3 + v337:1, 0, v334:0, v335:0, v336:0, 3, 1, 4) :|: v341:0 > 0 && v339:0 > 0 && v336:0 > 0 && v346:0 > -1 && v320:0 > -1 && v337:1 > 0 30.41/10.02 Filtered unneeded arguments: 30.41/10.02 f_424(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22, x23) -> f_424(x1, x2, x20) 30.41/10.02 Removed division, modulo operations, cleaned up constraints. Obtained 1 rules.P rules: 30.41/10.02 f_424(sum~cons_1~v346:0, v320:0, v336:0) -> f_424(v346:0, 1 + v320:0, v336:0) :|: v346:0 > -1 && v320:0 > -1 && v336:0 > 0 && sum~cons_1~v346:0 = 1 + v346:0 30.41/10.02 30.41/10.02 ---------------------------------------- 30.41/10.02 30.41/10.02 (9) 30.41/10.02 Obligation: 30.41/10.02 Rules: 30.41/10.02 f_424(sum~cons_1~v346:0, v320:0, v336:0) -> f_424(v346:0, 1 + v320:0, v336:0) :|: v346:0 > -1 && v320:0 > -1 && v336:0 > 0 && sum~cons_1~v346:0 = 1 + v346:0 30.41/10.02 30.41/10.02 ---------------------------------------- 30.41/10.02 30.41/10.02 (10) IntTRSCompressionProof (EQUIVALENT) 30.41/10.02 Compressed rules. 30.41/10.02 ---------------------------------------- 30.41/10.02 30.41/10.02 (11) 30.41/10.02 Obligation: 30.41/10.02 Rules: 30.41/10.02 f_424(sum~cons_1~v346:0:0, v320:0:0, v336:0:0) -> f_424(v346:0:0, 1 + v320:0:0, v336:0:0) :|: v346:0:0 > -1 && v320:0:0 > -1 && v336:0:0 > 0 && sum~cons_1~v346:0:0 = 1 + v346:0:0 30.41/10.02 30.41/10.02 ---------------------------------------- 30.41/10.02 30.41/10.02 (12) PolynomialOrderProcessor (EQUIVALENT) 30.41/10.02 Found the following polynomial interpretation: 30.41/10.02 [f_424(x, x1, x2)] = x 30.41/10.02 30.41/10.02 The following rules are decreasing: 30.41/10.02 f_424(sum~cons_1~v346:0:0, v320:0:0, v336:0:0) -> f_424(v346:0:0, 1 + v320:0:0, v336:0:0) :|: v346:0:0 > -1 && v320:0:0 > -1 && v336:0:0 > 0 && sum~cons_1~v346:0:0 = 1 + v346:0:0 30.41/10.02 The following rules are bounded: 30.41/10.02 f_424(sum~cons_1~v346:0:0, v320:0:0, v336:0:0) -> f_424(v346:0:0, 1 + v320:0:0, v336:0:0) :|: v346:0:0 > -1 && v320:0:0 > -1 && v336:0:0 > 0 && sum~cons_1~v346:0:0 = 1 + v346:0:0 30.41/10.02 30.41/10.02 ---------------------------------------- 30.41/10.02 30.41/10.02 (13) 30.41/10.02 YES 30.41/10.02 30.41/10.02 ---------------------------------------- 30.41/10.02 30.41/10.02 (14) 30.41/10.02 Obligation: 30.41/10.02 SCC 30.41/10.02 ---------------------------------------- 30.41/10.02 30.41/10.02 (15) SCC2IRS (SOUND) 30.41/10.02 Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: 30.41/10.02 Generated rules. Obtained 16 rulesP rules: 30.41/10.02 f_264(v55, v56, v67, v57, v58, v59, v60, v61, v62, v68, 0, v64, v65, 3, 1, 4) -> f_265(v55, v56, v67, v69, v57, v58, v59, v60, v61, v62, v68, v70, 0, v64, v65, 3, 1, 4) :|: 1 <= v69 && v70 = 3 + v69 && 4 <= v70 30.41/10.02 f_265(v55, v56, v67, v69, v57, v58, v59, v60, v61, v62, v68, v70, 0, v64, v65, 3, 1, 4) -> f_266(v55, v56, v67, v69, v71, v57, v58, v59, v60, v61, v62, v68, v70, v72, 0, v64, v65, 3, 1, 4) :|: 1 <= v71 && v72 = 3 + v71 && 4 <= v72 30.41/10.02 f_266(v55, v56, v67, v69, v71, v57, v58, v59, v60, v61, v62, v68, v70, v72, 0, v64, v65, 3, 1, 4) -> f_267(v55, v56, v67, v69, v71, v57, v58, v59, v60, v61, v62, v68, v70, v72, 0, v64, v65, 3, 1, 4) :|: TRUE 30.41/10.02 f_267(v55, v56, v67, v69, v71, v57, v58, v59, v60, v61, v62, v68, v70, v72, 0, v64, v65, 3, 1, 4) -> f_268(v55, v56, v67, v69, v71, v57, v58, v59, v60, v61, v62, v68, v70, v72, 0, v64, v65, 3, 1, 4) :|: TRUE 30.41/10.02 f_268(v55, v56, v67, v69, v71, v57, v58, v59, v60, v61, v62, v68, v70, v72, 0, v64, v65, 3, 1, 4) -> f_269(v55, v56, v67, v69, v71, v57, v58, v59, v60, v61, v62, v68, v70, v72, 0, v64, v65, 3, 1, 4) :|: 0 = 0 30.41/10.02 f_269(v55, v56, v67, v69, v71, v57, v58, v59, v60, v61, v62, v68, v70, v72, 0, v64, v65, 3, 1, 4) -> f_271(v55, v56, v67, v69, v71, v57, v58, v59, v60, v61, v62, v68, v70, v72, 0, v64, v65, 3, 1, 4) :|: v56 != 0 && 1 <= v65 30.41/10.02 f_271(v55, v56, v67, v69, v71, v57, v58, v59, v60, v61, v62, v68, v70, v72, 0, v64, v65, 3, 1, 4) -> f_273(v55, v56, v67, v69, v71, 0, v57, v58, v59, v60, v61, v62, v68, v70, v72, v64, v65, 3, 1, 4) :|: 0 = 0 30.41/10.02 f_273(v55, v56, v67, v69, v71, 0, v57, v58, v59, v60, v61, v62, v68, v70, v72, v64, v65, 3, 1, 4) -> f_275(v55, v56, v67, v69, v71, 0, v57, v58, v59, v60, v61, v62, v68, v70, v72, v64, v65, 3, 1, 4) :|: TRUE 30.41/10.02 f_275(v55, v56, v67, v69, v71, 0, v57, v58, v59, v60, v61, v62, v68, v70, v72, v64, v65, 3, 1, 4) -> f_277(v55, v56, v67, v69, v71, 0, v57, v58, v59, v60, v61, v62, v68, v70, v72, v64, v65, 3, 1, 4) :|: 0 = 0 30.41/10.02 f_277(v55, v56, v67, v69, v71, 0, v57, v58, v59, v60, v61, v62, v68, v70, v72, v64, v65, 3, 1, 4) -> f_279(v55, v56, v67, v69, v71, 0, v75, v57, v58, v59, v60, v61, v62, v68, v70, v72, v64, v65, 3, 1, 4) :|: v75 = 1 + v55 && 1 <= v75 30.41/10.02 f_279(v55, v56, v67, v69, v71, 0, v75, v57, v58, v59, v60, v61, v62, v68, v70, v72, v64, v65, 3, 1, 4) -> f_281(v55, v56, v67, v69, v71, 0, v75, v57, v58, v59, v60, v61, v62, v68, v70, v72, v64, v65, 3, 1, 4) :|: 0 = 0 30.41/10.02 f_281(v55, v56, v67, v69, v71, 0, v75, v57, v58, v59, v60, v61, v62, v68, v70, v72, v64, v65, 3, 1, 4) -> f_282(v55, v56, v67, v69, v71, 0, v75, v76, v57, v58, v59, v60, v61, v62, v68, v70, v72, v64, v65, 3, 1, 4) :|: 1 + v76 = v56 && 0 <= v76 30.41/10.02 f_282(v55, v56, v67, v69, v71, 0, v75, v76, v57, v58, v59, v60, v61, v62, v68, v70, v72, v64, v65, 3, 1, 4) -> f_284(v75, v76, v57, v58, v59, v60, v61, v62, v67, v68, v69, v70, v71, v72, 0, v64, v65, v55, v56, 3, 1, 4) :|: 0 = 0 30.41/10.02 f_284(v75, v76, v57, v58, v59, v60, v61, v62, v67, v68, v69, v70, v71, v72, 0, v64, v65, v55, v56, 3, 1, 4) -> f_286(v75, v76, v57, v58, v59, v60, v61, v62, v67, v68, v69, v70, v71, v72, 0, v64, v65, v55, v56, 3, 1, 4) :|: TRUE 30.41/10.02 f_286(v75, v76, v57, v58, v59, v60, v61, v62, v67, v68, v69, v70, v71, v72, 0, v64, v65, v55, v56, 3, 1, 4) -> f_262(v75, v76, v57, v58, v59, v60, v61, v62, 0, v64, v65, 3, 1, 4) :|: TRUE 30.41/10.02 f_262(v55, v56, v57, v58, v59, v60, v61, v62, 0, v64, v65, 3, 1, 4) -> f_264(v55, v56, v67, v57, v58, v59, v60, v61, v62, v68, 0, v64, v65, 3, 1, 4) :|: 1 <= v67 && v68 = 3 + v67 && 4 <= v68 30.41/10.02 Combined rules. Obtained 1 rulesP rules: 30.41/10.02 f_264(v55:0, 1 + v76:0, v67:0, v57:0, v58:0, v59:0, v60:0, v61:0, v62:0, v68:0, 0, v64:0, v65:0, 3, 1, 4) -> f_264(1 + v55:0, v76:0, v67:1, v57:0, v58:0, v59:0, v60:0, v61:0, v62:0, 3 + v67:1, 0, v64:0, v65:0, 3, 1, 4) :|: v71:0 > 0 && v69:0 > 0 && v65:0 > 0 && v76:0 > -1 && v55:0 > -1 && v67:1 > 0 30.41/10.02 Filtered unneeded arguments: 30.41/10.02 f_264(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16) -> f_264(x1, x2, x13) 30.41/10.02 Removed division, modulo operations, cleaned up constraints. Obtained 1 rules.P rules: 30.41/10.02 f_264(v55:0, sum~cons_1~v76:0, v65:0) -> f_264(1 + v55:0, v76:0, v65:0) :|: v76:0 > -1 && v55:0 > -1 && v65:0 > 0 && sum~cons_1~v76:0 = 1 + v76:0 30.41/10.02 30.41/10.02 ---------------------------------------- 30.41/10.02 30.41/10.02 (16) 30.41/10.02 Obligation: 30.41/10.02 Rules: 30.41/10.02 f_264(v55:0, sum~cons_1~v76:0, v65:0) -> f_264(1 + v55:0, v76:0, v65:0) :|: v76:0 > -1 && v55:0 > -1 && v65:0 > 0 && sum~cons_1~v76:0 = 1 + v76:0 30.41/10.02 30.41/10.02 ---------------------------------------- 30.41/10.02 30.41/10.02 (17) IntTRSCompressionProof (EQUIVALENT) 30.41/10.02 Compressed rules. 30.41/10.02 ---------------------------------------- 30.41/10.02 30.41/10.02 (18) 30.41/10.02 Obligation: 30.41/10.02 Rules: 30.41/10.02 f_264(v55:0:0, sum~cons_1~v76:0:0, v65:0:0) -> f_264(1 + v55:0:0, v76:0:0, v65:0:0) :|: v76:0:0 > -1 && v55:0:0 > -1 && v65:0:0 > 0 && sum~cons_1~v76:0:0 = 1 + v76:0:0 30.41/10.02 30.41/10.02 ---------------------------------------- 30.41/10.02 30.41/10.02 (19) RankingReductionPairProof (EQUIVALENT) 30.41/10.02 Interpretation: 30.41/10.02 [ f_264 ] = f_264_2 30.41/10.02 30.41/10.02 The following rules are decreasing: 30.41/10.02 f_264(v55:0:0, sum~cons_1~v76:0:0, v65:0:0) -> f_264(1 + v55:0:0, v76:0:0, v65:0:0) :|: v76:0:0 > -1 && v55:0:0 > -1 && v65:0:0 > 0 && sum~cons_1~v76:0:0 = 1 + v76:0:0 30.41/10.02 30.41/10.02 The following rules are bounded: 30.41/10.02 f_264(v55:0:0, sum~cons_1~v76:0:0, v65:0:0) -> f_264(1 + v55:0:0, v76:0:0, v65:0:0) :|: v76:0:0 > -1 && v55:0:0 > -1 && v65:0:0 > 0 && sum~cons_1~v76:0:0 = 1 + v76:0:0 30.41/10.02 30.41/10.02 30.41/10.02 ---------------------------------------- 30.41/10.02 30.41/10.02 (20) 30.41/10.02 YES 30.44/10.08 EOF