/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: 794c25de1cacf0d048858bcd21c9a779e1221865 marcel 20200619 unpublished dirty Termination of the given C Problem could be proven: (0) C Problem (1) CToLLVMProof [EQUIVALENT, 174 ms] (2) LLVM problem (3) LLVMToTerminationGraphProof [EQUIVALENT, 9061 ms] (4) LLVM Symbolic Execution Graph (5) SymbolicExecutionGraphToSCCProof [SOUND, 4 ms] (6) AND (7) LLVM Symbolic Execution SCC (8) SCC2IRS [SOUND, 111 ms] (9) IntTRS (10) IRS2T2 [EQUIVALENT, 0 ms] (11) T2IntSys (12) T2 [EQUIVALENT, 1853 ms] (13) YES (14) LLVM Symbolic Execution SCC (15) SCC2IRS [SOUND, 51 ms] (16) IntTRS (17) IRS2T2 [EQUIVALENT, 0 ms] (18) T2IntSys (19) T2 [EQUIVALENT, 1602 ms] (20) YES (21) LLVM Symbolic Execution SCC (22) SCC2IRS [SOUND, 67 ms] (23) IntTRS (24) IntTRSCompressionProof [EQUIVALENT, 0 ms] (25) IntTRS (26) PolynomialOrderProcessor [EQUIVALENT, 14 ms] (27) 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 %z = 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 %4 = call i32 @__VERIFIER_nondet_int() store %4, %z %5 = load %x %6 = icmp sgt %5 10000 br %6, %16, %7 7: %8 = load %x %9 = icmp slt %8 -10000 br %9, %16, %10 10: %11 = load %y %12 = icmp sgt %11 10000 br %12, %16, %13 13: %14 = load %z %15 = icmp sgt %14 10000 br %15, %16, %17 16: store 0, %1 br %38 17: br %18 18: %19 = load %y %20 = icmp sge %19 1 br %20, %21, %37 21: %22 = load %x %23 = add %22 -1 store %23, %x br %24 24: %25 = load %y %26 = load %z %27 = icmp slt %25 %26 br %27, %28, %33 28: %29 = load %x %30 = add %29 1 store %30, %x %31 = load %z %32 = add %31 -1 store %32, %z br %24 33: %34 = load %x %35 = load %y %36 = add %34 %35 store %36, %y br %18 37: store 0, %1 br %38 38: %39 = load %1 ret %39 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 3 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 46 rulesP rules: f_676(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1517, v1518, v1515, v1519, v1520, v1521, v1522, v1523, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) -> f_679(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1517, v1518, v1515, v1519, v1520, v1521, v1522, v1523, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) :|: 1 <= v1524 f_679(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1517, v1518, v1515, v1519, v1520, v1521, v1522, v1523, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) -> f_683(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1517, v1518, v1515, v1519, v1520, v1521, v1522, v1523, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) :|: 0 = 0 f_683(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1517, v1518, v1515, v1519, v1520, v1521, v1522, v1523, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) -> f_687(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1517, v1518, v1515, v1519, v1520, v1521, v1522, v1523, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) :|: TRUE f_687(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1517, v1518, v1515, v1519, v1520, v1521, v1522, v1523, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) -> f_691(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1523, v1518, v1515, v1519, v1520, v1521, v1522, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) :|: 0 = 0 f_691(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1523, v1518, v1515, v1519, v1520, v1521, v1522, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) -> f_695(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1523, v1624, v1515, v1519, v1520, v1521, v1522, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) :|: 1 + v1624 = v1523 f_695(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1523, v1624, v1515, v1519, v1520, v1521, v1522, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) -> f_698(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1523, v1624, v1515, v1519, v1520, v1521, v1522, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) :|: TRUE f_698(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1523, v1624, v1515, v1519, v1520, v1521, v1522, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) -> f_702(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1523, v1624, v1515, v1519, v1520, v1521, v1522, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) :|: TRUE f_702(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1523, v1624, v1515, v1519, v1520, v1521, v1522, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) -> f_704(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1523, v1624, v1519, v1520, v1521, v1522, v1515, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) :|: 0 = 0 f_704(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1523, v1624, v1519, v1520, v1521, v1522, v1515, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) -> f_706(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1523, v1624, v1519, v1520, v1521, v1522, v1515, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) :|: 0 = 0 f_706(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1523, v1624, v1519, v1520, v1521, v1522, v1515, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) -> f_709(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1523, v1624, v1519, v1520, v1521, v1522, v1515, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 9997, 9998, 4, 9996) :|: v1524 < v1519 && v1524 <= 9998 && 2 <= v1519 && 3 <= v1522 && v1523 <= 9997 && v1624 <= 9996 && 3 <= v1513 f_706(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1523, v1624, v1519, v1520, v1521, v1522, v1515, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) -> f_710(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1523, v1624, v1519, v1520, v1521, v1522, v1515, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) :|: v1519 <= v1524 f_709(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1523, v1624, v1519, v1520, v1521, v1522, v1515, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 9997, 9998, 4, 9996) -> f_713(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1523, v1624, v1519, v1520, v1521, v1522, v1515, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 9997, 9998, 4, 9996) :|: 0 = 0 f_713(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1523, v1624, v1519, v1520, v1521, v1522, v1515, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 9997, 9998, 4, 9996) -> f_717(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1523, v1624, v1519, v1520, v1521, v1522, v1515, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 9997, 9998, 4, 9996) :|: TRUE f_717(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1523, v1624, v1519, v1520, v1521, v1522, v1515, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 9997, 9998, 4, 9996) -> f_752(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1523, v1624, v1519, v1520, v1521, v1522, v1515, v1525, v1526, v1527, v1528, v1624, 3, 10000, 9998, 9997, 9996, 2, 9999, 4) :|: TRUE f_752(v2040, v2041, v2042, v2043, v2044, v2045, v2046, 0, v2048, 1, v2050, v2051, v2052, v2053, v2054, v2055, v2056, v2057, v2058, v2059, v2060, v2061, 3, 10000, 9998, 9997, 9996, 2, 9999, 4) -> f_754(v2040, v2041, v2042, v2043, v2044, v2045, v2046, 0, v2048, 1, v2050, v2051, v2052, v2061, v2054, v2055, v2056, v2057, v2058, v2059, v2060, 3, 10000, 9998, 9997, 9996, 2, 9999, 4) :|: 0 = 0 f_754(v2040, v2041, v2042, v2043, v2044, v2045, v2046, 0, v2048, 1, v2050, v2051, v2052, v2061, v2054, v2055, v2056, v2057, v2058, v2059, v2060, 3, 10000, 9998, 9997, 9996, 2, 9999, 4) -> f_756(v2040, v2041, v2042, v2043, v2044, v2045, v2046, 0, v2048, 1, v2050, v2051, v2052, v2061, v2102, v2055, v2056, v2057, v2058, v2059, v2060, 3, 10000, 9998, 9997, 9996, 2, 9999, 4) :|: v2102 = 1 + v2061 f_756(v2040, v2041, v2042, v2043, v2044, v2045, v2046, 0, v2048, 1, v2050, v2051, v2052, v2061, v2102, v2055, v2056, v2057, v2058, v2059, v2060, 3, 10000, 9998, 9997, 9996, 2, 9999, 4) -> f_758(v2040, v2041, v2042, v2043, v2044, v2045, v2046, 0, v2048, 1, v2050, v2051, v2052, v2061, v2102, v2055, v2056, v2057, v2058, v2059, v2060, 3, 10000, 9998, 9997, 9996, 2, 9999, 4) :|: TRUE f_758(v2040, v2041, v2042, v2043, v2044, v2045, v2046, 0, v2048, 1, v2050, v2051, v2052, v2061, v2102, v2055, v2056, v2057, v2058, v2059, v2060, 3, 10000, 9998, 9997, 9996, 2, 9999, 4) -> f_760(v2040, v2041, v2042, v2043, v2044, v2045, v2046, 0, v2048, 1, v2050, v2051, v2052, v2061, v2102, v2056, v2057, v2058, v2059, v2060, 3, 10000, 9998, 9997, 9996, 2, 9999, 4) :|: 0 = 0 f_760(v2040, v2041, v2042, v2043, v2044, v2045, v2046, 0, v2048, 1, v2050, v2051, v2052, v2061, v2102, v2056, v2057, v2058, v2059, v2060, 3, 10000, 9998, 9997, 9996, 2, 9999, 4) -> f_762(v2040, v2041, v2042, v2043, v2044, v2045, v2046, 0, v2048, 1, v2050, v2051, v2052, v2061, v2102, v2106, v2056, v2057, v2058, v2059, v2060, 3, 10000, 9998, 9997, 9996, 2, 9999, 4) :|: 1 + v2106 = v2052 && 1 <= v2106 && v2106 <= 9998 f_762(v2040, v2041, v2042, v2043, v2044, v2045, v2046, 0, v2048, 1, v2050, v2051, v2052, v2061, v2102, v2106, v2056, v2057, v2058, v2059, v2060, 3, 10000, 9998, 9997, 9996, 2, 9999, 4) -> f_764(v2040, v2041, v2042, v2043, v2044, v2045, v2046, 0, v2048, 1, v2050, v2051, v2052, v2061, v2102, v2106, v2056, v2057, v2058, v2059, v2060, 3, 10000, 9998, 9997, 9996, 2, 9999, 4) :|: TRUE f_764(v2040, v2041, v2042, v2043, v2044, v2045, v2046, 0, v2048, 1, v2050, v2051, v2052, v2061, v2102, v2106, v2056, v2057, v2058, v2059, v2060, 3, 10000, 9998, 9997, 9996, 2, 9999, 4) -> f_765(v2040, v2041, v2042, v2043, v2044, v2045, v2046, 0, v2048, 1, v2050, v2051, v2052, v2061, v2102, v2106, v2056, v2057, v2058, v2059, v2060, 3, 10000, 9998, 9997, 9996, 2, 9999, 4) :|: TRUE f_765(v2040, v2041, v2042, v2043, v2044, v2045, v2046, 0, v2048, 1, v2050, v2051, v2052, v2061, v2102, v2106, v2056, v2057, v2058, v2059, v2060, 3, 10000, 9998, 9997, 9996, 2, 9999, 4) -> f_744(v2040, v2041, v2042, v2043, v2044, v2045, v2046, 0, v2048, 1, v2050, v2051, v2052, v2056, v2061, v2102, v2106, v2057, v2058, v2059, v2060, 3, 10000, 2, 9999, 9997, 9996, 4) :|: TRUE f_744(v1989, v1990, v1991, v1992, v1993, v1994, v1995, 0, v1997, 1, v1999, v2000, v2001, v2002, v2003, v2004, v2005, v2006, v2007, v2008, v2009, 3, 10000, 2, 9999, 9997, 9996, 4) -> f_745(v1989, v1990, v1991, v1992, v1993, v1994, v1995, 0, v1997, 1, v1999, v2000, v2001, v2002, v2003, v2004, v2005, v2006, v2007, v2008, v2009, 3, 10000, 2, 9999, 9997, 9996, 4) :|: 0 = 0 f_745(v1989, v1990, v1991, v1992, v1993, v1994, v1995, 0, v1997, 1, v1999, v2000, v2001, v2002, v2003, v2004, v2005, v2006, v2007, v2008, v2009, 3, 10000, 2, 9999, 9997, 9996, 4) -> f_746(v1989, v1990, v1991, v1992, v1993, v1994, v1995, 0, v1997, 1, v1999, v2000, v2005, v2002, v2003, v2004, v2001, v2006, v2007, v2008, v2009, 3, 10000, 2, 9999, 9997, 9996, 4) :|: 0 = 0 f_746(v1989, v1990, v1991, v1992, v1993, v1994, v1995, 0, v1997, 1, v1999, v2000, v2005, v2002, v2003, v2004, v2001, v2006, v2007, v2008, v2009, 3, 10000, 2, 9999, 9997, 9996, 4) -> f_747(v1989, v1990, v1991, v1992, v1993, v1994, v1995, 0, v1997, 1, v1999, v2000, v2005, v2002, v2003, v2004, v2001, v2006, v2007, v2008, v2009, 3, 10000, 9998, 9997, 9996, 2, 9999, 4) :|: v1997 < v2005 && v1997 <= 9998 && 2 <= v2005 && 3 <= v2001 && 3 <= v1995 f_746(v1989, v1990, v1991, v1992, v1993, v1994, v1995, 0, v1997, 1, v1999, v2000, v2005, v2002, v2003, v2004, v2001, v2006, v2007, v2008, v2009, 3, 10000, 2, 9999, 9997, 9996, 4) -> f_748(v1989, v1990, v1991, v1992, v1993, v1994, v1995, 0, v1997, 1, v1999, v2000, v2002, v2003, v2004, v2001, v2006, v2007, v2008, v2009, 3, 10000, 2, 9999, 9997, 9996, 4) :|: v2005 <= v1997 && v2005 = v1997 f_747(v1989, v1990, v1991, v1992, v1993, v1994, v1995, 0, v1997, 1, v1999, v2000, v2005, v2002, v2003, v2004, v2001, v2006, v2007, v2008, v2009, 3, 10000, 9998, 9997, 9996, 2, 9999, 4) -> f_749(v1989, v1990, v1991, v1992, v1993, v1994, v1995, 0, v1997, 1, v1999, v2000, v2005, v2002, v2003, v2004, v2001, v2006, v2007, v2008, v2009, 3, 10000, 9998, 9997, 9996, 2, 9999, 4) :|: 0 = 0 f_749(v1989, v1990, v1991, v1992, v1993, v1994, v1995, 0, v1997, 1, v1999, v2000, v2005, v2002, v2003, v2004, v2001, v2006, v2007, v2008, v2009, 3, 10000, 9998, 9997, 9996, 2, 9999, 4) -> f_751(v1989, v1990, v1991, v1992, v1993, v1994, v1995, 0, v1997, 1, v1999, v2000, v2005, v2002, v2003, v2004, v2001, v2006, v2007, v2008, v2009, 3, 10000, 9998, 9997, 9996, 2, 9999, 4) :|: TRUE f_751(v1989, v1990, v1991, v1992, v1993, v1994, v1995, 0, v1997, 1, v1999, v2000, v2005, v2002, v2003, v2004, v2001, v2006, v2007, v2008, v2009, 3, 10000, 9998, 9997, 9996, 2, 9999, 4) -> f_752(v1989, v1990, v1991, v1992, v1993, v1994, v1995, 0, v1997, 1, v1999, v2000, v2005, v2003, v2004, v2001, v2002, v2006, v2007, v2008, v2009, v2004, 3, 10000, 9998, 9997, 9996, 2, 9999, 4) :|: TRUE f_748(v1989, v1990, v1991, v1992, v1993, v1994, v1995, 0, v1997, 1, v1999, v2000, v2002, v2003, v2004, v2001, v2006, v2007, v2008, v2009, 3, 10000, 2, 9999, 9997, 9996, 4) -> f_750(v1989, v1990, v1991, v1992, v1993, v1994, v1995, 0, v1997, 1, v1999, v2000, v2002, v2003, v2004, v2001, v2006, v2007, v2008, v2009, 3, 10000, 2, 9999, 9997, 9996, 4) :|: 0 = 0 f_750(v1989, v1990, v1991, v1992, v1993, v1994, v1995, 0, v1997, 1, v1999, v2000, v2002, v2003, v2004, v2001, v2006, v2007, v2008, v2009, 3, 10000, 2, 9999, 9997, 9996, 4) -> f_753(v1989, v1990, v1991, v1992, v1993, v1994, v1995, 0, v1997, 1, v1999, v2000, v2002, v2003, v2004, v2001, v2006, v2007, v2008, v2009, 3, 10000, 2, 9999, 9997, 9996, 4) :|: TRUE f_753(v1989, v1990, v1991, v1992, v1993, v1994, v1995, 0, v1997, 1, v1999, v2000, v2002, v2003, v2004, v2001, v2006, v2007, v2008, v2009, 3, 10000, 2, 9999, 9997, 9996, 4) -> f_755(v1989, v1990, v1991, v1992, v1993, v1994, v1995, 0, v1997, 1, v1999, v2000, v2004, v2002, v2003, v2001, v2006, v2007, v2008, v2009, 3, 10000, 2, 9999, 9997, 9996, 4) :|: 0 = 0 f_755(v1989, v1990, v1991, v1992, v1993, v1994, v1995, 0, v1997, 1, v1999, v2000, v2004, v2002, v2003, v2001, v2006, v2007, v2008, v2009, 3, 10000, 2, 9999, 9997, 9996, 4) -> f_757(v1989, v1990, v1991, v1992, v1993, v1994, v1995, 0, v1997, 1, v1999, v2000, v2004, v2003, v2001, v2006, v2007, v2008, v2009, 3, 10000, 2, 9999, 9997, 9996, 4) :|: 0 = 0 f_757(v1989, v1990, v1991, v1992, v1993, v1994, v1995, 0, v1997, 1, v1999, v2000, v2004, v2003, v2001, v2006, v2007, v2008, v2009, 3, 10000, 2, 9999, 9997, 9996, 4) -> f_759(v1989, v1990, v1991, v1992, v1993, v1994, v1995, 0, v1997, 1, v1999, v2000, v2004, v2104, v2003, v2001, v2006, v2007, v2008, v2009, 3, 10000, 2, 9999, 9997, 9996, 4) :|: v2104 = v2004 + v1997 f_759(v1989, v1990, v1991, v1992, v1993, v1994, v1995, 0, v1997, 1, v1999, v2000, v2004, v2104, v2003, v2001, v2006, v2007, v2008, v2009, 3, 10000, 2, 9999, 9997, 9996, 4) -> f_761(v1989, v1990, v1991, v1992, v1993, v1994, v1995, 0, v1997, 1, v1999, v2000, v2004, v2104, v2003, v2001, v2006, v2007, v2008, v2009, 3, 10000, 2, 9999, 9997, 9996, 4) :|: TRUE f_761(v1989, v1990, v1991, v1992, v1993, v1994, v1995, 0, v1997, 1, v1999, v2000, v2004, v2104, v2003, v2001, v2006, v2007, v2008, v2009, 3, 10000, 2, 9999, 9997, 9996, 4) -> f_763(v1989, v1990, v1991, v1992, v1993, v1994, v1995, 0, v1997, 1, v1999, v2000, v2004, v2104, v2003, v2001, v2006, v2007, v2008, v2009, 3, 10000, 2, 9999, 9997, 9996, 4) :|: TRUE f_763(v1989, v1990, v1991, v1992, v1993, v1994, v1995, 0, v1997, 1, v1999, v2000, v2004, v2104, v2003, v2001, v2006, v2007, v2008, v2009, 3, 10000, 2, 9999, 9997, 9996, 4) -> f_673(v1989, v1990, v1991, v1992, v1993, v1994, v1995, 0, v1997, 1, v1999, v2000, v1997, v2003, v2004, v2001, v2004, v2104, v2006, v2007, v2008, v2009, 3, 10000, 2, 9999, 4) :|: TRUE f_673(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1515, 1, v1517, v1518, v1519, v1520, v1521, v1522, v1523, v1524, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) -> f_676(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1517, v1518, v1515, v1519, v1520, v1521, v1522, v1523, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) :|: 0 = 0 f_710(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1523, v1624, v1519, v1520, v1521, v1522, v1515, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) -> f_714(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1523, v1624, v1519, v1520, v1521, v1522, v1515, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) :|: 0 = 0 f_714(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1523, v1624, v1519, v1520, v1521, v1522, v1515, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) -> f_718(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1523, v1624, v1519, v1520, v1521, v1522, v1515, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) :|: TRUE f_718(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1523, v1624, v1519, v1520, v1521, v1522, v1515, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) -> f_722(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1523, v1624, v1519, v1520, v1521, v1522, v1515, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) :|: 0 = 0 f_722(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1523, v1624, v1519, v1520, v1521, v1522, v1515, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) -> f_726(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1523, v1624, v1519, v1520, v1521, v1522, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) :|: 0 = 0 f_726(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1523, v1624, v1519, v1520, v1521, v1522, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) -> f_730(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1523, v1624, v1519, v1520, v1521, v1522, v1802, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) :|: v1802 = v1624 + v1524 f_730(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1523, v1624, v1519, v1520, v1521, v1522, v1802, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) -> f_734(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1523, v1624, v1519, v1520, v1521, v1522, v1802, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) :|: TRUE f_734(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1523, v1624, v1519, v1520, v1521, v1522, v1802, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) -> f_738(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1523, v1624, v1519, v1520, v1521, v1522, v1802, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) :|: TRUE f_738(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1523, v1624, v1519, v1520, v1521, v1522, v1802, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) -> f_673(v1507, v1508, v1509, v1510, v1511, v1512, v1513, 0, v1524, 1, v1523, v1624, v1519, v1520, v1521, v1522, v1624, v1802, v1525, v1526, v1527, v1528, 3, 10000, 2, 9999, 4) :|: TRUE Combined rules. Obtained 4 rulesP rules: f_746(v1989:0, v1990:0, v1991:0, v1992:0, v1993:0, v1994:0, v1995:0, 0, v1997:0, 1, v1999:0, v2000:0, 1 + v2106:0, v2002:0, v2003:0, v2004:0, v2001:0, v2006:0, v2007:0, v2008:0, v2009:0, 3, 10000, 2, 9999, 9997, 9996, 4) -> f_746(v1989:0, v1990:0, v1991:0, v1992:0, v1993:0, v1994:0, v1995:0, 0, v1997:0, 1, v1999:0, v2000:0, v2106:0, v2002:0, v2004:0, 1 + v2004:0, 1 + v2106:0, v2006:0, v2007:0, v2008:0, v2009:0, 3, 10000, 2, 9999, 9997, 9996, 4) :|: v2106:0 > 0 && v2106:0 < 9999 && v1997:0 < 9999 && v1997:0 < 1 + v2106:0 && v1995:0 > 2 && v2001:0 > 2 f_746(v1989:0, v1990:0, v1991:0, v1992:0, v1993:0, v1994:0, v1995:0, 0, v1997:0, 1, v1999:0, v2000:0, v1997:0, v2002:0, v2003:0, v2004:0, v2001:0, v2006:0, v2007:0, v2008:0, v2009:0, 3, 10000, 2, 9999, 9997, 9996, 4) -> f_676(v1989:0, v1990:0, v1991:0, v1992:0, v1993:0, v1994:0, v1995:0, 0, v2004:0 + v1997:0, 1, v1999:0, v2000:0, v1997:0, v1997:0, v2003:0, v2004:0, v2001:0, v2004:0, v2006:0, v2007:0, v2008:0, v2009:0, 3, 10000, 2, 9999, 4) :|: TRUE f_676(v1507:0, v1508:0, v1509:0, v1510:0, v1511:0, v1512:0, v1513:0, 0, v1524:0, 1, v1517:0, v1518:0, v1515:0, 1 + v2106:0, v1520:0, v1521:0, v1522:0, 1 + v1624:0, v1525:0, v1526:0, v1527:0, v1528:0, 3, 10000, 2, 9999, 4) -> f_746(v1507:0, v1508:0, v1509:0, v1510:0, v1511:0, v1512:0, v1513:0, 0, v1524:0, 1, 1 + v1624:0, v1624:0, v2106:0, v1515:0, v1624:0, 1 + v1624:0, 1 + v2106:0, v1525:0, v1526:0, v1527:0, v1528:0, 3, 10000, 2, 9999, 9997, 9996, 4) :|: v1524:0 > 0 && v1524:0 < 9999 && v1524:0 < 1 + v2106:0 && v2106:0 > 0 && v1522:0 > 2 && v1624:0 < 9997 && v1513:0 > 2 && v2106:0 < 9999 f_676(v1507:0, v1508:0, v1509:0, v1510:0, v1511:0, v1512:0, v1513:0, 0, v1524:0, 1, v1517:0, v1518:0, v1515:0, v1519:0, v1520:0, v1521:0, v1522:0, 1 + v1624:0, v1525:0, v1526:0, v1527:0, v1528:0, 3, 10000, 2, 9999, 4) -> f_676(v1507:0, v1508:0, v1509:0, v1510:0, v1511:0, v1512:0, v1513:0, 0, v1624:0 + v1524:0, 1, 1 + v1624:0, v1624:0, v1524:0, v1519:0, v1520:0, v1521:0, v1522:0, v1624:0, v1525:0, v1526:0, v1527:0, v1528:0, 3, 10000, 2, 9999, 4) :|: v1524:0 >= v1519:0 && v1524:0 > 0 Filtered unneeded arguments: f_746(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28) -> f_746(x7, x9, x13, x16, x17) f_676(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27) -> f_676(x7, x9, x14, x17, x18) Removed division, modulo operations, cleaned up constraints. Obtained 4 rules.P rules: f_746(v1995:0, v1997:0, sum~cons_1~v2106:0, v2004:0, v2001:0) -> f_746(v1995:0, v1997:0, v2106:0, 1 + v2004:0, 1 + v2106:0) :|: v2106:0 < 9999 && v2106:0 > 0 && v1997:0 < 9999 && v1997:0 < 1 + v2106:0 && v2001:0 > 2 && v1995:0 > 2 && sum~cons_1~v2106:0 = 1 + v2106:0 f_746(v1995:0, v1997:0, v1997:01, v2004:0, v2001:0) -> f_676(v1995:0, v2004:0 + v1997:0, v1997:0, v2001:0, v2004:0) :|: TRUE && v1997:0 = v1997:01 f_676(v1513:0, v1524:0, sum~cons_1~v2106:0, v1522:0, sum~cons_1~v1624:0) -> f_746(v1513:0, v1524:0, v2106:0, 1 + v1624:0, 1 + v2106:0) :|: v1524:0 < 9999 && v1524:0 > 0 && v1524:0 < 1 + v2106:0 && v2106:0 > 0 && v1522:0 > 2 && v1624:0 < 9997 && v2106:0 < 9999 && v1513:0 > 2 && sum~cons_1~v2106:0 = 1 + v2106:0 && sum~cons_1~v1624:0 = 1 + v1624:0 f_676(v1513:0, v1524:0, v1519:0, v1522:0, sum~cons_1~v1624:0) -> f_676(v1513:0, v1624:0 + v1524:0, v1519:0, v1522:0, v1624:0) :|: v1524:0 >= v1519:0 && v1524:0 > 0 && sum~cons_1~v1624:0 = 1 + v1624:0 ---------------------------------------- (9) Obligation: Rules: f_746(v1995:0, v1997:0, sum~cons_1~v2106:0, v2004:0, v2001:0) -> f_746(v1995:0, v1997:0, v2106:0, 1 + v2004:0, 1 + v2106:0) :|: v2106:0 < 9999 && v2106:0 > 0 && v1997:0 < 9999 && v1997:0 < 1 + v2106:0 && v2001:0 > 2 && v1995:0 > 2 && sum~cons_1~v2106:0 = 1 + v2106:0 f_746(x, x1, x2, x3, x4) -> f_676(x, x3 + x1, x1, x4, x3) :|: TRUE && x1 = x2 f_676(x5, x6, x7, x8, x9) -> f_746(x5, x6, x10, 1 + x11, 1 + x10) :|: x6 < 9999 && x6 > 0 && x6 < 1 + x10 && x10 > 0 && x8 > 2 && x11 < 9997 && x10 < 9999 && x5 > 2 && x7 = 1 + x10 && x9 = 1 + x11 f_676(v1513:0, v1524:0, v1519:0, v1522:0, sum~cons_1~v1624:0) -> f_676(v1513:0, v1624:0 + v1524:0, v1519:0, v1522:0, v1624:0) :|: v1524:0 >= v1519:0 && v1524:0 > 0 && sum~cons_1~v1624:0 = 1 + v1624:0 ---------------------------------------- (10) IRS2T2 (EQUIVALENT) Transformed input IRS into an integer transition system.Used the following mapping from defined symbols to location IDs: (f_746_5,1) (f_676_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 := oldX2 - 1; assume(oldX5 < 9999 && oldX5 > 0 && oldX1 < 9999 && oldX1 < 1 + oldX5 && oldX4 > 2 && oldX0 > 2 && oldX2 = 1 + oldX5); x0 := oldX0; x1 := oldX1; x2 := oldX2 - 1; x3 := 1 + oldX3; x4 := 1 + oldX5; TO: 1; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := x4; assume(0 = 0 && oldX1 = oldX2); x0 := oldX0; x1 := oldX3 + oldX1; x2 := oldX1; x3 := oldX4; x4 := oldX3; TO: 2; FROM: 2; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := x4; oldX5 := oldX2 - 1; oldX6 := oldX4 - 1; assume(oldX1 < 9999 && oldX1 > 0 && oldX1 < 1 + oldX5 && oldX5 > 0 && oldX3 > 2 && oldX6 < 9997 && oldX5 < 9999 && oldX0 > 2 && oldX2 = 1 + oldX5 && oldX4 = 1 + oldX6); x0 := oldX0; x1 := oldX1; x2 := oldX2 - 1; x3 := 1 + oldX6; x4 := 1 + oldX5; TO: 1; FROM: 2; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := x3; oldX4 := x4; oldX5 := oldX4 - 1; assume(oldX1 >= oldX2 && oldX1 > 0 && oldX4 = 1 + oldX5); x0 := oldX0; x1 := oldX5 + oldX1; x2 := oldX2; x3 := oldX3; x4 := oldX4 - 1; TO: 2; ---------------------------------------- (12) T2 (EQUIVALENT) Initially, performed program simplifications using lexicographic rank functions: * Removed transitions 2, 5, 6, 17 using the following rank functions: - Rank function 1: RF for loc. 6: 9998+19995*x2 RF for loc. 7: 19995*x2 RF for loc. 8: 9997+19995*x2 RF for loc. 12: 19995*x2 Bound for (chained) transitions 17: 39990 - Rank function 2: RF for loc. 6: 2-3*x1+3*x2 RF for loc. 7: 0 RF for loc. 8: 1-3*x1+3*x2 RF for loc. 12: 0 Bound for (chained) transitions 5: -29987 Bound for (chained) transitions 6: 1 - Rank function 3: RF for loc. 6: 1 RF for loc. 7: 1+2*x4 RF for loc. 8: 0 RF for loc. 12: 2*x4 Bound for (chained) transitions 2: 1 ---------------------------------------- (13) YES ---------------------------------------- (14) Obligation: SCC ---------------------------------------- (15) SCC2IRS (SOUND) Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: Generated rules. Obtained 19 rulesP rules: f_513(v679, v680, v681, v682, v683, v684, v685, 0, v691, 1, v689, v690, v687, v692, v693, v694, v695, 3, 10000, 9999, 4) -> f_515(v679, v680, v681, v682, v683, v684, v685, 0, v691, 1, v689, v690, v687, v692, v693, v694, v695, 3, 10000, 9999, 4) :|: 1 <= v691 f_515(v679, v680, v681, v682, v683, v684, v685, 0, v691, 1, v689, v690, v687, v692, v693, v694, v695, 3, 10000, 9999, 4) -> f_518(v679, v680, v681, v682, v683, v684, v685, 0, v691, 1, v689, v690, v687, v692, v693, v694, v695, 3, 10000, 9999, 4) :|: 0 = 0 f_518(v679, v680, v681, v682, v683, v684, v685, 0, v691, 1, v689, v690, v687, v692, v693, v694, v695, 3, 10000, 9999, 4) -> f_521(v679, v680, v681, v682, v683, v684, v685, 0, v691, 1, v689, v690, v687, v692, v693, v694, v695, 3, 10000, 9999, 4) :|: TRUE f_521(v679, v680, v681, v682, v683, v684, v685, 0, v691, 1, v689, v690, v687, v692, v693, v694, v695, 3, 10000, 9999, 4) -> f_525(v679, v680, v681, v682, v683, v684, v685, 0, v691, 1, v690, v687, v692, v693, v694, v695, 3, 10000, 9999, 4) :|: 0 = 0 f_525(v679, v680, v681, v682, v683, v684, v685, 0, v691, 1, v690, v687, v692, v693, v694, v695, 3, 10000, 9999, 4) -> f_529(v679, v680, v681, v682, v683, v684, v685, 0, v691, 1, v690, v724, v687, v692, v693, v694, v695, 3, 10000, 9999, 4, 9998) :|: 1 + v724 = v690 && v724 <= 9998 f_529(v679, v680, v681, v682, v683, v684, v685, 0, v691, 1, v690, v724, v687, v692, v693, v694, v695, 3, 10000, 9999, 4, 9998) -> f_533(v679, v680, v681, v682, v683, v684, v685, 0, v691, 1, v690, v724, v687, v692, v693, v694, v695, 3, 10000, 9999, 4, 9998) :|: TRUE f_533(v679, v680, v681, v682, v683, v684, v685, 0, v691, 1, v690, v724, v687, v692, v693, v694, v695, 3, 10000, 9999, 4, 9998) -> f_537(v679, v680, v681, v682, v683, v684, v685, 0, v691, 1, v690, v724, v687, v692, v693, v694, v695, 3, 10000, 9999, 4, 9998) :|: TRUE f_537(v679, v680, v681, v682, v683, v684, v685, 0, v691, 1, v690, v724, v687, v692, v693, v694, v695, 3, 10000, 9999, 4, 9998) -> f_540(v679, v680, v681, v682, v683, v684, v685, 0, v691, 1, v690, v724, v687, v692, v693, v694, v695, 3, 10000, 9999, 4, 9998) :|: 0 = 0 f_540(v679, v680, v681, v682, v683, v684, v685, 0, v691, 1, v690, v724, v687, v692, v693, v694, v695, 3, 10000, 9999, 4, 9998) -> f_543(v679, v680, v681, v682, v683, v684, v685, 0, v691, 1, v690, v724, v687, v692, v693, v694, v695, 3, 10000, 9999, 4, 9998) :|: 0 = 0 f_543(v679, v680, v681, v682, v683, v684, v685, 0, v691, 1, v690, v724, v687, v692, v693, v694, v695, 3, 10000, 9999, 4, 9998) -> f_547(v679, v680, v681, v682, v683, v684, v685, 0, v691, 1, v690, v724, v687, v692, v693, v694, v695, 3, 10000, 9999, 4, 9998) :|: v685 <= v691 f_547(v679, v680, v681, v682, v683, v684, v685, 0, v691, 1, v690, v724, v687, v692, v693, v694, v695, 3, 10000, 9999, 4, 9998) -> f_552(v679, v680, v681, v682, v683, v684, v685, 0, v691, 1, v690, v724, v687, v692, v693, v694, v695, 3, 10000, 9999, 4, 9998) :|: 0 = 0 f_552(v679, v680, v681, v682, v683, v684, v685, 0, v691, 1, v690, v724, v687, v692, v693, v694, v695, 3, 10000, 9999, 4, 9998) -> f_555(v679, v680, v681, v682, v683, v684, v685, 0, v691, 1, v690, v724, v687, v692, v693, v694, v695, 3, 10000, 9999, 4, 9998) :|: TRUE f_555(v679, v680, v681, v682, v683, v684, v685, 0, v691, 1, v690, v724, v687, v692, v693, v694, v695, 3, 10000, 9999, 4, 9998) -> f_559(v679, v680, v681, v682, v683, v684, v685, 0, v691, 1, v690, v724, v687, v692, v693, v694, v695, 3, 10000, 9999, 4, 9998) :|: 0 = 0 f_559(v679, v680, v681, v682, v683, v684, v685, 0, v691, 1, v690, v724, v687, v692, v693, v694, v695, 3, 10000, 9999, 4, 9998) -> f_563(v679, v680, v681, v682, v683, v684, v685, 0, v691, 1, v690, v724, v692, v693, v694, v695, 3, 10000, 9999, 4, 9998) :|: 0 = 0 f_563(v679, v680, v681, v682, v683, v684, v685, 0, v691, 1, v690, v724, v692, v693, v694, v695, 3, 10000, 9999, 4, 9998) -> f_567(v679, v680, v681, v682, v683, v684, v685, 0, v691, 1, v690, v724, v846, v692, v693, v694, v695, 3, 10000, 9999, 4, 9998) :|: v846 = v724 + v691 f_567(v679, v680, v681, v682, v683, v684, v685, 0, v691, 1, v690, v724, v846, v692, v693, v694, v695, 3, 10000, 9999, 4, 9998) -> f_571(v679, v680, v681, v682, v683, v684, v685, 0, v691, 1, v690, v724, v846, v692, v693, v694, v695, 3, 10000, 9999, 4, 9998) :|: TRUE f_571(v679, v680, v681, v682, v683, v684, v685, 0, v691, 1, v690, v724, v846, v692, v693, v694, v695, 3, 10000, 9999, 4, 9998) -> f_575(v679, v680, v681, v682, v683, v684, v685, 0, v691, 1, v690, v724, v846, v692, v693, v694, v695, 3, 10000, 9999, 4, 9998) :|: TRUE f_575(v679, v680, v681, v682, v683, v684, v685, 0, v691, 1, v690, v724, v846, v692, v693, v694, v695, 3, 10000, 9999, 4, 9998) -> f_510(v679, v680, v681, v682, v683, v684, v685, 0, v691, 1, v690, v724, v846, v692, v693, v694, v695, 3, 10000, 9999, 4) :|: TRUE f_510(v679, v680, v681, v682, v683, v684, v685, 0, v687, 1, v689, v690, v691, v692, v693, v694, v695, 3, 10000, 9999, 4) -> f_513(v679, v680, v681, v682, v683, v684, v685, 0, v691, 1, v689, v690, v687, v692, v693, v694, v695, 3, 10000, 9999, 4) :|: 0 = 0 Combined rules. Obtained 1 rulesP rules: f_513(v679:0, v680:0, v681:0, v682:0, v683:0, v684:0, v685:0, 0, v691:0, 1, v689:0, 1 + v724:0, v687:0, v692:0, v693:0, v694:0, v695:0, 3, 10000, 9999, 4) -> f_513(v679:0, v680:0, v681:0, v682:0, v683:0, v684:0, v685:0, 0, v724:0 + v691:0, 1, 1 + v724:0, v724:0, v691:0, v692:0, v693:0, v694:0, v695:0, 3, 10000, 9999, 4) :|: v691:0 > 0 && v691:0 >= v685:0 && v724:0 < 9999 Filtered unneeded arguments: f_513(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21) -> f_513(x7, x9, x12) Removed division, modulo operations, cleaned up constraints. Obtained 1 rules.P rules: f_513(v685:0, v691:0, sum~cons_1~v724:0) -> f_513(v685:0, v724:0 + v691:0, v724:0) :|: v691:0 >= v685:0 && v724:0 < 9999 && v691:0 > 0 && sum~cons_1~v724:0 = 1 + v724:0 ---------------------------------------- (16) Obligation: Rules: f_513(v685:0, v691:0, sum~cons_1~v724:0) -> f_513(v685:0, v724:0 + v691:0, v724:0) :|: v691:0 >= v685:0 && v724:0 < 9999 && v691:0 > 0 && sum~cons_1~v724:0 = 1 + v724:0 ---------------------------------------- (17) IRS2T2 (EQUIVALENT) Transformed input IRS into an integer transition system.Used the following mapping from defined symbols to location IDs: (f_513_3,1) ---------------------------------------- (18) Obligation: START: 0; FROM: 0; TO: 1; FROM: 1; oldX0 := x0; oldX1 := x1; oldX2 := x2; oldX3 := oldX2 - 1; assume(oldX1 >= oldX0 && oldX3 < 9999 && oldX1 > 0 && oldX2 = 1 + oldX3); x0 := oldX0; x1 := oldX3 + oldX1; x2 := oldX2 - 1; TO: 1; ---------------------------------------- (19) T2 (EQUIVALENT) No proof given by T2 ---------------------------------------- (20) YES ---------------------------------------- (21) Obligation: SCC ---------------------------------------- (22) SCC2IRS (SOUND) Transformed LLVM symbolic execution graph SCC into a rewrite problem. Log: Generated rules. Obtained 13 rulesP rules: f_384(v293, v294, v295, v296, v297, v298, v299, 0, 1, v302, v303, v304, v305, v306, v307, v308, v309, v310, 3, 10000, 9999, 2, 10001, 4) -> f_387(v293, v294, v295, v296, v297, v298, v299, 0, 1, v302, v306, v304, v305, v303, v307, v308, v309, v310, 3, 10000, 9999, 2, 10001, 4) :|: 0 = 0 f_387(v293, v294, v295, v296, v297, v298, v299, 0, 1, v302, v306, v304, v305, v303, v307, v308, v309, v310, 3, 10000, 9999, 2, 10001, 4) -> f_390(v293, v294, v295, v296, v297, v298, v299, 0, 1, v302, v306, v304, v305, v303, v307, v308, v309, v310, 3, 10000, 9998, 10001, 9999, 2, 4) :|: v298 < v306 && v298 <= 9998 && 2 <= v306 && 3 <= v303 && 3 <= v299 f_390(v293, v294, v295, v296, v297, v298, v299, 0, 1, v302, v306, v304, v305, v303, v307, v308, v309, v310, 3, 10000, 9998, 10001, 9999, 2, 4) -> f_394(v293, v294, v295, v296, v297, v298, v299, 0, 1, v302, v306, v304, v305, v303, v307, v308, v309, v310, 3, 10000, 9998, 10001, 9999, 2, 4) :|: 0 = 0 f_394(v293, v294, v295, v296, v297, v298, v299, 0, 1, v302, v306, v304, v305, v303, v307, v308, v309, v310, 3, 10000, 9998, 10001, 9999, 2, 4) -> f_398(v293, v294, v295, v296, v297, v298, v299, 0, 1, v302, v306, v304, v305, v303, v307, v308, v309, v310, 3, 10000, 9998, 10001, 9999, 2, 4) :|: TRUE f_398(v293, v294, v295, v296, v297, v298, v299, 0, 1, v302, v306, v304, v305, v303, v307, v308, v309, v310, 3, 10000, 9998, 10001, 9999, 2, 4) -> f_402(v293, v294, v295, v296, v297, v298, v299, 0, 1, v302, v306, v305, v303, v307, v308, v309, v310, 3, 10000, 9998, 10001, 9999, 2, 4) :|: 0 = 0 f_402(v293, v294, v295, v296, v297, v298, v299, 0, 1, v302, v306, v305, v303, v307, v308, v309, v310, 3, 10000, 9998, 10001, 9999, 2, 4) -> f_405(v293, v294, v295, v296, v297, v298, v299, 0, 1, v302, v306, v305, v338, v303, v307, v308, v309, v310, 3, 10000, 9998, 10001, 9999, 2, 4) :|: v338 = 1 + v305 && 0 <= 9999 + v338 f_405(v293, v294, v295, v296, v297, v298, v299, 0, 1, v302, v306, v305, v338, v303, v307, v308, v309, v310, 3, 10000, 9998, 10001, 9999, 2, 4) -> f_408(v293, v294, v295, v296, v297, v298, v299, 0, 1, v302, v306, v305, v338, v303, v307, v308, v309, v310, 3, 10000, 9998, 10001, 9999, 2, 4) :|: TRUE f_408(v293, v294, v295, v296, v297, v298, v299, 0, 1, v302, v306, v305, v338, v303, v307, v308, v309, v310, 3, 10000, 9998, 10001, 9999, 2, 4) -> f_411(v293, v294, v295, v296, v297, v298, v299, 0, 1, v302, v306, v305, v338, v307, v308, v309, v310, 3, 10000, 9998, 10001, 9999, 2, 4) :|: 0 = 0 f_411(v293, v294, v295, v296, v297, v298, v299, 0, 1, v302, v306, v305, v338, v307, v308, v309, v310, 3, 10000, 9998, 10001, 9999, 2, 4) -> f_415(v293, v294, v295, v296, v297, v298, v299, 0, 1, v302, v306, v305, v338, v342, v307, v308, v309, v310, 3, 10000, 9998, 10001, 9999, 2, 4) :|: 1 + v342 = v306 && 1 <= v342 && v342 <= 9998 f_415(v293, v294, v295, v296, v297, v298, v299, 0, 1, v302, v306, v305, v338, v342, v307, v308, v309, v310, 3, 10000, 9998, 10001, 9999, 2, 4) -> f_419(v293, v294, v295, v296, v297, v298, v299, 0, 1, v302, v306, v305, v338, v342, v307, v308, v309, v310, 3, 10000, 9998, 10001, 9999, 2, 4) :|: TRUE f_419(v293, v294, v295, v296, v297, v298, v299, 0, 1, v302, v306, v305, v338, v342, v307, v308, v309, v310, 3, 10000, 9998, 10001, 9999, 2, 4) -> f_423(v293, v294, v295, v296, v297, v298, v299, 0, 1, v302, v306, v305, v338, v342, v307, v308, v309, v310, 3, 10000, 9998, 10001, 9999, 2, 4) :|: TRUE f_423(v293, v294, v295, v296, v297, v298, v299, 0, 1, v302, v306, v305, v338, v342, v307, v308, v309, v310, 3, 10000, 9998, 10001, 9999, 2, 4) -> f_381(v293, v294, v295, v296, v297, v298, v299, 0, 1, v302, v306, v305, v338, v342, v307, v308, v309, v310, 3, 10000, 9999, 2, 10001, 4) :|: TRUE f_381(v293, v294, v295, v296, v297, v298, v299, 0, 1, v302, v303, v304, v305, v306, v307, v308, v309, v310, 3, 10000, 9999, 2, 10001, 4) -> f_384(v293, v294, v295, v296, v297, v298, v299, 0, 1, v302, v303, v304, v305, v306, v307, v308, v309, v310, 3, 10000, 9999, 2, 10001, 4) :|: 0 = 0 Combined rules. Obtained 1 rulesP rules: f_384(v293:0, v294:0, v295:0, v296:0, v297:0, v298:0, v299:0, 0, 1, v302:0, v303:0, v304:0, v305:0, 1 + v342:0, v307:0, v308:0, v309:0, v310:0, 3, 10000, 9999, 2, 10001, 4) -> f_384(v293:0, v294:0, v295:0, v296:0, v297:0, v298:0, v299:0, 0, 1, v302:0, 1 + v342:0, v305:0, 1 + v305:0, v342:0, v307:0, v308:0, v309:0, v310:0, 3, 10000, 9999, 2, 10001, 4) :|: v298:0 < 9999 && v298:0 < 1 + v342:0 && v342:0 > 0 && v303:0 > 2 && v299:0 > 2 && v305:0 > -10001 && v342:0 < 9999 Filtered unneeded arguments: f_384(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_384(x6, x7, x11, x13, x14) Removed division, modulo operations, cleaned up constraints. Obtained 1 rules.P rules: f_384(v298:0, v299:0, v303:0, v305:0, sum~cons_1~v342:0) -> f_384(v298:0, v299:0, 1 + v342:0, 1 + v305:0, v342:0) :|: v298:0 < 1 + v342:0 && v298:0 < 9999 && v342:0 > 0 && v303:0 > 2 && v299:0 > 2 && v342:0 < 9999 && v305:0 > -10001 && sum~cons_1~v342:0 = 1 + v342:0 ---------------------------------------- (23) Obligation: Rules: f_384(v298:0, v299:0, v303:0, v305:0, sum~cons_1~v342:0) -> f_384(v298:0, v299:0, 1 + v342:0, 1 + v305:0, v342:0) :|: v298:0 < 1 + v342:0 && v298:0 < 9999 && v342:0 > 0 && v303:0 > 2 && v299:0 > 2 && v342:0 < 9999 && v305:0 > -10001 && sum~cons_1~v342:0 = 1 + v342:0 ---------------------------------------- (24) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (25) Obligation: Rules: f_384(v298:0:0, v299:0:0, v303:0:0, v305:0:0, sum~cons_1~v342:0:0) -> f_384(v298:0:0, v299:0:0, 1 + v342:0:0, 1 + v305:0:0, v342:0:0) :|: v342:0:0 < 9999 && v305:0:0 > -10001 && v299:0:0 > 2 && v303:0:0 > 2 && v342:0:0 > 0 && v298:0:0 < 9999 && v298:0:0 < 1 + v342:0:0 && sum~cons_1~v342:0:0 = 1 + v342:0:0 ---------------------------------------- (26) PolynomialOrderProcessor (EQUIVALENT) Found the following polynomial interpretation: [f_384(x, x1, x2, x3, x4)] = x4 The following rules are decreasing: f_384(v298:0:0, v299:0:0, v303:0:0, v305:0:0, sum~cons_1~v342:0:0) -> f_384(v298:0:0, v299:0:0, 1 + v342:0:0, 1 + v305:0:0, v342:0:0) :|: v342:0:0 < 9999 && v305:0:0 > -10001 && v299:0:0 > 2 && v303:0:0 > 2 && v342:0:0 > 0 && v298:0:0 < 9999 && v298:0:0 < 1 + v342:0:0 && sum~cons_1~v342:0:0 = 1 + v342:0:0 The following rules are bounded: f_384(v298:0:0, v299:0:0, v303:0:0, v305:0:0, sum~cons_1~v342:0:0) -> f_384(v298:0:0, v299:0:0, 1 + v342:0:0, 1 + v305:0:0, v342:0:0) :|: v342:0:0 < 9999 && v305:0:0 > -10001 && v299:0:0 > 2 && v303:0:0 > 2 && v342:0:0 > 0 && v298:0:0 < 9999 && v298:0:0 < 1 + v342:0:0 && sum~cons_1~v342:0:0 = 1 + v342:0:0 ---------------------------------------- (27) YES