10.16/3.88 YES 10.16/3.88 proof of /export/starexec/sandbox/benchmark/theBenchmark.jar 10.16/3.88 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 10.16/3.88 10.16/3.88 10.16/3.88 termination of the given Bare JBC problem could be proven: 10.16/3.88 10.16/3.88 (0) Bare JBC problem 10.16/3.88 (1) BareJBCToJBCProof [EQUIVALENT, 96 ms] 10.16/3.88 (2) JBC problem 10.16/3.88 (3) JBCToGraph [EQUIVALENT, 420 ms] 10.16/3.88 (4) JBCTerminationGraph 10.16/3.88 (5) TerminationGraphToSCCProof [SOUND, 2 ms] 10.16/3.88 (6) JBCTerminationSCC 10.16/3.88 (7) SCCToIRSProof [SOUND, 95 ms] 10.16/3.88 (8) IRSwT 10.16/3.88 (9) IRSFormatTransformerProof [EQUIVALENT, 0 ms] 10.16/3.88 (10) IRSwT 10.16/3.88 (11) IRSwTTerminationDigraphProof [EQUIVALENT, 110 ms] 10.16/3.88 (12) IRSwT 10.16/3.88 (13) IntTRSCompressionProof [EQUIVALENT, 0 ms] 10.16/3.88 (14) IRSwT 10.16/3.88 (15) FilterProof [EQUIVALENT, 0 ms] 10.16/3.88 (16) IntTRS 10.16/3.88 (17) IntTRSCompressionProof [EQUIVALENT, 0 ms] 10.16/3.88 (18) IntTRS 10.16/3.88 (19) PolynomialOrderProcessor [EQUIVALENT, 18 ms] 10.16/3.88 (20) IntTRS 10.16/3.88 (21) TerminationGraphProcessor [EQUIVALENT, 0 ms] 10.16/3.88 (22) YES 10.16/3.88 10.16/3.88 10.16/3.88 ---------------------------------------- 10.16/3.88 10.16/3.88 (0) 10.16/3.88 Obligation: 10.16/3.88 need to prove termination of the following program: 10.16/3.88 /** 10.16/3.88 * Abstract class to provide some additional mathematical functions 10.16/3.88 * which are not provided by java.lang.Math. 10.16/3.88 * 10.16/3.88 * @author fuhs 10.16/3.88 */ 10.16/3.88 public abstract class AProVEMath { 10.16/3.88 10.16/3.88 /** 10.16/3.88 * Returns baseexponent. 10.16/3.88 * Works considerably faster than java.lang.Math.pow(double, double). 10.16/3.88 * 10.16/3.88 * @param base base of the power 10.16/3.88 * @param exponent non-negative exponent of the power 10.16/3.88 * @return baseexponent 10.16/3.88 */ 10.16/3.88 public static int power (int base, int exponent) { 10.16/3.88 if (exponent == 0) { 10.16/3.88 return 1; 10.16/3.88 } 10.16/3.88 else if (exponent == 1) { 10.16/3.88 return base; 10.16/3.88 } 10.16/3.88 else if (base == 2) { 10.16/3.88 return base << (exponent-1); 10.16/3.88 } 10.16/3.88 else { 10.16/3.88 int result = 1; 10.16/3.88 while (exponent > 0) { 10.16/3.88 if (exponent % 2 == 1) { 10.16/3.88 result *= base; 10.16/3.88 } 10.16/3.88 base *= base; 10.16/3.88 exponent /= 2; 10.16/3.88 } 10.16/3.88 return result; 10.16/3.88 } 10.16/3.88 } 10.16/3.88 10.16/3.88 public static void main(String[] args) { 10.16/3.88 Random.args = args; 10.16/3.88 int x = Random.random(); 10.16/3.88 int y = Random.random(); 10.16/3.88 power(x, y); 10.16/3.88 } 10.16/3.88 } 10.16/3.88 10.16/3.88 10.16/3.88 public class Random { 10.16/3.88 static String[] args; 10.16/3.89 static int index = 0; 10.16/3.89 10.16/3.89 public static int random() { 10.16/3.89 String string = args[index]; 10.16/3.89 index++; 10.16/3.89 return string.length(); 10.16/3.89 } 10.16/3.89 } 10.16/3.89 10.16/3.89 10.16/3.89 10.16/3.89 ---------------------------------------- 10.16/3.89 10.16/3.89 (1) BareJBCToJBCProof (EQUIVALENT) 10.16/3.89 initialized classpath 10.16/3.89 ---------------------------------------- 10.16/3.89 10.16/3.89 (2) 10.16/3.89 Obligation: 10.16/3.89 need to prove termination of the following program: 10.16/3.89 /** 10.16/3.89 * Abstract class to provide some additional mathematical functions 10.16/3.89 * which are not provided by java.lang.Math. 10.16/3.89 * 10.16/3.89 * @author fuhs 10.16/3.89 */ 10.16/3.89 public abstract class AProVEMath { 10.16/3.89 10.16/3.89 /** 10.16/3.89 * Returns baseexponent. 10.16/3.89 * Works considerably faster than java.lang.Math.pow(double, double). 10.16/3.89 * 10.16/3.89 * @param base base of the power 10.16/3.89 * @param exponent non-negative exponent of the power 10.16/3.89 * @return baseexponent 10.16/3.89 */ 10.16/3.89 public static int power (int base, int exponent) { 10.16/3.89 if (exponent == 0) { 10.16/3.89 return 1; 10.16/3.89 } 10.16/3.89 else if (exponent == 1) { 10.16/3.89 return base; 10.16/3.89 } 10.16/3.89 else if (base == 2) { 10.16/3.89 return base << (exponent-1); 10.16/3.89 } 10.16/3.89 else { 10.16/3.89 int result = 1; 10.16/3.89 while (exponent > 0) { 10.16/3.89 if (exponent % 2 == 1) { 10.16/3.89 result *= base; 10.16/3.89 } 10.16/3.89 base *= base; 10.16/3.89 exponent /= 2; 10.16/3.89 } 10.16/3.89 return result; 10.16/3.89 } 10.16/3.89 } 10.16/3.89 10.16/3.89 public static void main(String[] args) { 10.16/3.89 Random.args = args; 10.16/3.89 int x = Random.random(); 10.16/3.89 int y = Random.random(); 10.16/3.89 power(x, y); 10.16/3.89 } 10.16/3.89 } 10.16/3.89 10.16/3.89 10.16/3.89 public class Random { 10.16/3.89 static String[] args; 10.16/3.89 static int index = 0; 10.16/3.89 10.16/3.89 public static int random() { 10.16/3.89 String string = args[index]; 10.16/3.89 index++; 10.16/3.89 return string.length(); 10.16/3.89 } 10.16/3.89 } 10.16/3.89 10.16/3.89 10.16/3.89 10.16/3.89 ---------------------------------------- 10.16/3.89 10.16/3.89 (3) JBCToGraph (EQUIVALENT) 10.16/3.89 Constructed TerminationGraph. 10.16/3.89 ---------------------------------------- 10.16/3.89 10.16/3.89 (4) 10.16/3.89 Obligation: 10.16/3.89 Termination Graph based on JBC Program: 10.16/3.89 AProVEMath.main([Ljava/lang/String;)V: Graph of 237 nodes with 1 SCC. 10.16/3.89 10.16/3.89 10.16/3.89 10.16/3.89 10.16/3.89 10.16/3.89 ---------------------------------------- 10.16/3.89 10.16/3.89 (5) TerminationGraphToSCCProof (SOUND) 10.16/3.89 Splitted TerminationGraph to 1 SCCs. 10.16/3.89 ---------------------------------------- 10.16/3.89 10.16/3.89 (6) 10.16/3.89 Obligation: 10.16/3.89 SCC of termination graph based on JBC Program. 10.16/3.89 SCC contains nodes from the following methods: AProVEMath.main([Ljava/lang/String;)V 10.16/3.89 SCC calls the following helper methods: 10.16/3.89 Performed SCC analyses: 10.16/3.89 *Used field analysis yielded the following read fields: 10.16/3.89 10.16/3.89 *Marker field analysis yielded the following relations that could be markers: 10.16/3.89 10.16/3.89 ---------------------------------------- 10.16/3.89 10.16/3.89 (7) SCCToIRSProof (SOUND) 10.16/3.89 Transformed FIGraph SCCs to intTRSs. Log: 10.16/3.89 Generated rules. Obtained 26 IRulesP rules: 10.16/3.89 f1738_0_power_LE(EOS(STATIC_1738), i380, i380) -> f1743_0_power_Load(EOS(STATIC_1743), i380) :|: i380 > 0 10.16/3.89 f1743_0_power_Load(EOS(STATIC_1743), i380) -> f1785_0_power_ConstantStackPush(EOS(STATIC_1785), i380, i380) :|: TRUE 10.16/3.89 f1785_0_power_ConstantStackPush(EOS(STATIC_1785), i380, i380) -> f1787_0_power_IntArithmetic(EOS(STATIC_1787), i380, i380, 2) :|: TRUE 10.16/3.89 f1787_0_power_IntArithmetic(EOS(STATIC_1787), i380, i380, matching1) -> f1790_0_power_ConstantStackPush(EOS(STATIC_1790), i380, i380 % 2) :|: TRUE && matching1 = 2 10.16/3.89 f1790_0_power_ConstantStackPush(EOS(STATIC_1790), i380, i381) -> f1792_0_power_NE(EOS(STATIC_1792), i380, i381, 1) :|: TRUE 10.16/3.89 f1792_0_power_NE(EOS(STATIC_1792), i380, matching1, matching2) -> f1801_0_power_NE(EOS(STATIC_1801), i380, 0, 1) :|: i381 = 0 && matching1 = 0 && matching2 = 1 10.16/3.89 f1792_0_power_NE(EOS(STATIC_1792), i380, matching1, matching2) -> f1802_0_power_NE(EOS(STATIC_1802), i380, 1, 1) :|: i381 = 1 && matching1 = 1 && matching2 = 1 10.16/3.89 f1801_0_power_NE(EOS(STATIC_1801), i380, matching1, matching2) -> f1805_0_power_Load(EOS(STATIC_1805), i380) :|: TRUE && matching1 = 0 && matching2 = 1 10.16/3.89 f1805_0_power_Load(EOS(STATIC_1805), i380) -> f1818_0_power_Load(EOS(STATIC_1818), i380) :|: TRUE 10.16/3.89 f1818_0_power_Load(EOS(STATIC_1818), i380) -> f1822_0_power_IntArithmetic(EOS(STATIC_1822), i380) :|: TRUE 10.16/3.89 f1822_0_power_IntArithmetic(EOS(STATIC_1822), i380) -> f1826_0_power_Store(EOS(STATIC_1826), i380) :|: TRUE 10.16/3.89 f1826_0_power_Store(EOS(STATIC_1826), i380) -> f1831_0_power_Load(EOS(STATIC_1831), i380) :|: TRUE 10.16/3.89 f1831_0_power_Load(EOS(STATIC_1831), i380) -> f1840_0_power_ConstantStackPush(EOS(STATIC_1840), i380) :|: TRUE 10.16/3.89 f1840_0_power_ConstantStackPush(EOS(STATIC_1840), i380) -> f1843_0_power_IntArithmetic(EOS(STATIC_1843), i380, 2) :|: TRUE 10.16/3.89 f1843_0_power_IntArithmetic(EOS(STATIC_1843), i380, matching1) -> f1846_0_power_Store(EOS(STATIC_1846), i395) :|: i395 = i380 / 2 && i380 >= 1 && i395 < i380 && matching1 = 2 10.16/3.89 f1846_0_power_Store(EOS(STATIC_1846), i395) -> f1848_0_power_JMP(EOS(STATIC_1848), i395) :|: TRUE 10.16/3.89 f1848_0_power_JMP(EOS(STATIC_1848), i395) -> f1863_0_power_Load(EOS(STATIC_1863), i395) :|: TRUE 10.16/3.89 f1863_0_power_Load(EOS(STATIC_1863), i395) -> f1725_0_power_Load(EOS(STATIC_1725), i395) :|: TRUE 10.16/3.89 f1725_0_power_Load(EOS(STATIC_1725), i340) -> f1736_0_power_LE(EOS(STATIC_1736), i340, i340) :|: TRUE 10.16/3.89 f1736_0_power_LE(EOS(STATIC_1736), i380, i380) -> f1738_0_power_LE(EOS(STATIC_1738), i380, i380) :|: TRUE 10.16/3.89 f1802_0_power_NE(EOS(STATIC_1802), i380, matching1, matching2) -> f1816_0_power_Load(EOS(STATIC_1816), i380) :|: TRUE && matching1 = 1 && matching2 = 1 10.16/3.89 f1816_0_power_Load(EOS(STATIC_1816), i380) -> f1820_0_power_Load(EOS(STATIC_1820), i380) :|: TRUE 10.16/3.89 f1820_0_power_Load(EOS(STATIC_1820), i380) -> f1824_0_power_IntArithmetic(EOS(STATIC_1824), i380) :|: TRUE 10.16/3.89 f1824_0_power_IntArithmetic(EOS(STATIC_1824), i380) -> f1829_0_power_Store(EOS(STATIC_1829), i380) :|: TRUE 10.16/3.89 f1829_0_power_Store(EOS(STATIC_1829), i380) -> f1839_0_power_Load(EOS(STATIC_1839), i380) :|: TRUE 10.16/3.89 f1839_0_power_Load(EOS(STATIC_1839), i380) -> f1805_0_power_Load(EOS(STATIC_1805), i380) :|: TRUE 10.16/3.89 Combined rules. Obtained 4 IRulesP rules: 10.16/3.89 f1738_0_power_LE(EOS(STATIC_1738), i380:0, i380:0) -> f1738_0_power_LE'(EOS(STATIC_1738), i380:0, i380:0) :|: i380:0 > 0 && i380:0 - 2 * div = 0 && i380:0 > div1 10.16/3.89 f1738_0_power_LE'(EOS(STATIC_1738), i380:0, i380:0) -> f1738_0_power_LE(EOS(STATIC_1738), div1, div1) :|: i380:0 > 0 && i380:0 - 2 * div = 0 && i380:0 > div1 && i380:0 - 2 * div > -2 && i380:0 - 2 * div < 2 && i380:0 - 2 * div1 < 2 && i380:0 - 2 * div1 > -2 10.16/3.89 f1738_0_power_LE(EOS(STATIC_1738), i380:0, i380:0) -> f1738_0_power_LE'(EOS(STATIC_1738), i380:0, i380:0) :|: i380:0 > 0 && i380:0 - 2 * div = 1 && i380:0 > div1 10.16/3.89 f1738_0_power_LE'(EOS(STATIC_1738), i380:0, i380:0) -> f1738_0_power_LE(EOS(STATIC_1738), div1, div1) :|: i380:0 > 0 && i380:0 > div1 && i380:0 - 2 * div = 1 && i380:0 - 2 * div > -2 && i380:0 - 2 * div < 2 && i380:0 - 2 * div1 < 2 && i380:0 - 2 * div1 > -2 10.16/3.89 Filtered constant ground arguments: 10.16/3.89 f1738_0_power_LE(x1, x2, x3) -> f1738_0_power_LE(x2, x3) 10.16/3.89 f1738_0_power_LE'(x1, x2, x3) -> f1738_0_power_LE'(x2, x3) 10.16/3.89 EOS(x1) -> EOS 10.16/3.89 Filtered duplicate arguments: 10.16/3.89 f1738_0_power_LE(x1, x2) -> f1738_0_power_LE(x2) 10.16/3.89 f1738_0_power_LE'(x1, x2) -> f1738_0_power_LE'(x2) 10.16/3.89 Finished conversion. Obtained 4 rules.P rules: 10.16/3.89 f1738_0_power_LE(i380:0) -> f1738_0_power_LE'(i380:0) :|: i380:0 - 2 * div = 0 && i380:0 > div1 && i380:0 > 0 10.16/3.89 f1738_0_power_LE'(i380:0) -> f1738_0_power_LE(div1) :|: i380:0 - 2 * div = 0 && i380:0 > 0 && i380:0 > div1 && i380:0 - 2 * div > -2 && i380:0 - 2 * div < 2 && i380:0 - 2 * div1 > -2 && i380:0 - 2 * div1 < 2 10.16/3.89 f1738_0_power_LE(i380:0) -> f1738_0_power_LE'(i380:0) :|: i380:0 - 2 * div = 1 && i380:0 > div1 && i380:0 > 0 10.16/3.89 f1738_0_power_LE'(i380:0) -> f1738_0_power_LE(div1) :|: i380:0 > div1 && i380:0 > 0 && i380:0 - 2 * div = 1 && i380:0 - 2 * div > -2 && i380:0 - 2 * div < 2 && i380:0 - 2 * div1 > -2 && i380:0 - 2 * div1 < 2 10.16/3.89 10.16/3.89 ---------------------------------------- 10.16/3.89 10.16/3.89 (8) 10.16/3.89 Obligation: 10.16/3.89 Rules: 10.16/3.89 f1738_0_power_LE(x) -> f1738_0_power_LE'(x) :|: x - 2 * x1 = 0 && x > x2 && x > 0 10.16/3.89 f1738_0_power_LE'(x3) -> f1738_0_power_LE(x4) :|: x3 - 2 * x5 = 0 && x3 > 0 && x3 > x4 && x3 - 2 * x5 > -2 && x3 - 2 * x5 < 2 && x3 - 2 * x4 > -2 && x3 - 2 * x4 < 2 10.16/3.89 f1738_0_power_LE(x6) -> f1738_0_power_LE'(x6) :|: x6 - 2 * x7 = 1 && x6 > x8 && x6 > 0 10.16/3.89 f1738_0_power_LE'(x9) -> f1738_0_power_LE(x10) :|: x9 > x10 && x9 > 0 && x9 - 2 * x11 = 1 && x9 - 2 * x11 > -2 && x9 - 2 * x11 < 2 && x9 - 2 * x10 > -2 && x9 - 2 * x10 < 2 10.16/3.89 10.16/3.89 ---------------------------------------- 10.16/3.89 10.16/3.89 (9) IRSFormatTransformerProof (EQUIVALENT) 10.16/3.89 Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). 10.16/3.89 ---------------------------------------- 10.16/3.89 10.16/3.89 (10) 10.16/3.89 Obligation: 10.16/3.89 Rules: 10.16/3.89 f1738_0_power_LE(x) -> f1738_0_power_LE'(x) :|: x - 2 * x1 = 0 && x > x2 && x > 0 10.16/3.89 f1738_0_power_LE'(x3) -> f1738_0_power_LE(x4) :|: x3 - 2 * x5 = 0 && x3 > 0 && x3 > x4 && x3 - 2 * x5 > -2 && x3 - 2 * x5 < 2 && x3 - 2 * x4 > -2 && x3 - 2 * x4 < 2 10.16/3.89 f1738_0_power_LE(x6) -> f1738_0_power_LE'(x6) :|: x6 - 2 * x7 = 1 && x6 > x8 && x6 > 0 10.16/3.89 f1738_0_power_LE'(x9) -> f1738_0_power_LE(x10) :|: x9 > x10 && x9 > 0 && x9 - 2 * x11 = 1 && x9 - 2 * x11 > -2 && x9 - 2 * x11 < 2 && x9 - 2 * x10 > -2 && x9 - 2 * x10 < 2 10.16/3.89 10.16/3.89 ---------------------------------------- 10.16/3.89 10.16/3.89 (11) IRSwTTerminationDigraphProof (EQUIVALENT) 10.16/3.89 Constructed termination digraph! 10.16/3.89 Nodes: 10.16/3.89 (1) f1738_0_power_LE(x) -> f1738_0_power_LE'(x) :|: x - 2 * x1 = 0 && x > x2 && x > 0 10.16/3.89 (2) f1738_0_power_LE'(x3) -> f1738_0_power_LE(x4) :|: x3 - 2 * x5 = 0 && x3 > 0 && x3 > x4 && x3 - 2 * x5 > -2 && x3 - 2 * x5 < 2 && x3 - 2 * x4 > -2 && x3 - 2 * x4 < 2 10.16/3.89 (3) f1738_0_power_LE(x6) -> f1738_0_power_LE'(x6) :|: x6 - 2 * x7 = 1 && x6 > x8 && x6 > 0 10.16/3.89 (4) f1738_0_power_LE'(x9) -> f1738_0_power_LE(x10) :|: x9 > x10 && x9 > 0 && x9 - 2 * x11 = 1 && x9 - 2 * x11 > -2 && x9 - 2 * x11 < 2 && x9 - 2 * x10 > -2 && x9 - 2 * x10 < 2 10.16/3.89 10.16/3.89 Arcs: 10.16/3.89 (1) -> (2) 10.16/3.89 (2) -> (1), (3) 10.16/3.89 (3) -> (4) 10.16/3.89 (4) -> (1), (3) 10.16/3.89 10.16/3.89 This digraph is fully evaluated! 10.16/3.89 ---------------------------------------- 10.16/3.89 10.16/3.89 (12) 10.16/3.89 Obligation: 10.16/3.89 10.16/3.89 Termination digraph: 10.16/3.89 Nodes: 10.16/3.89 (1) f1738_0_power_LE(x) -> f1738_0_power_LE'(x) :|: x - 2 * x1 = 0 && x > x2 && x > 0 10.16/3.89 (2) f1738_0_power_LE'(x9) -> f1738_0_power_LE(x10) :|: x9 > x10 && x9 > 0 && x9 - 2 * x11 = 1 && x9 - 2 * x11 > -2 && x9 - 2 * x11 < 2 && x9 - 2 * x10 > -2 && x9 - 2 * x10 < 2 10.16/3.89 (3) f1738_0_power_LE(x6) -> f1738_0_power_LE'(x6) :|: x6 - 2 * x7 = 1 && x6 > x8 && x6 > 0 10.16/3.89 (4) f1738_0_power_LE'(x3) -> f1738_0_power_LE(x4) :|: x3 - 2 * x5 = 0 && x3 > 0 && x3 > x4 && x3 - 2 * x5 > -2 && x3 - 2 * x5 < 2 && x3 - 2 * x4 > -2 && x3 - 2 * x4 < 2 10.16/3.89 10.16/3.89 Arcs: 10.16/3.89 (1) -> (4) 10.16/3.89 (2) -> (1), (3) 10.16/3.89 (3) -> (2) 10.16/3.89 (4) -> (1), (3) 10.16/3.89 10.16/3.89 This digraph is fully evaluated! 10.16/3.89 10.16/3.89 ---------------------------------------- 10.16/3.89 10.16/3.89 (13) IntTRSCompressionProof (EQUIVALENT) 10.16/3.89 Compressed rules. 10.16/3.89 ---------------------------------------- 10.16/3.89 10.16/3.89 (14) 10.16/3.89 Obligation: 10.16/3.89 Rules: 10.16/3.89 f1738_0_power_LE(x6:0) -> f1738_0_power_LE'(x6:0) :|: x6:0 - 2 * x7:0 = 1 && x8:0 < x6:0 && x6:0 > 0 10.16/3.89 f1738_0_power_LE'(x3:0) -> f1738_0_power_LE(x4:0) :|: x3:0 - 2 * x4:0 > -2 && x3:0 - 2 * x4:0 < 2 && x3:0 - 2 * x5:0 < 2 && x3:0 - 2 * x5:0 > -2 && x4:0 < x3:0 && x3:0 > 0 && x3:0 - 2 * x5:0 = 0 10.16/3.89 f1738_0_power_LE(x:0) -> f1738_0_power_LE'(x:0) :|: x:0 - 2 * x1:0 = 0 && x:0 > x2:0 && x:0 > 0 10.16/3.89 f1738_0_power_LE'(x9:0) -> f1738_0_power_LE(x10:0) :|: x9:0 - 2 * x10:0 > -2 && x9:0 - 2 * x10:0 < 2 && x9:0 - 2 * x11:0 < 2 && x9:0 - 2 * x11:0 > -2 && x9:0 - 2 * x11:0 = 1 && x9:0 > 0 && x9:0 > x10:0 10.16/3.89 10.16/3.89 ---------------------------------------- 10.16/3.89 10.16/3.89 (15) FilterProof (EQUIVALENT) 10.16/3.89 Used the following sort dictionary for filtering: 10.16/3.89 f1738_0_power_LE(INTEGER) 10.16/3.89 f1738_0_power_LE'(INTEGER) 10.16/3.89 Replaced non-predefined constructor symbols by 0. 10.16/3.89 ---------------------------------------- 10.16/3.89 10.16/3.89 (16) 10.16/3.89 Obligation: 10.16/3.89 Rules: 10.16/3.89 f1738_0_power_LE(x6:0) -> f1738_0_power_LE'(x6:0) :|: x6:0 - 2 * x7:0 = 1 && x8:0 < x6:0 && x6:0 > 0 10.16/3.89 f1738_0_power_LE'(x3:0) -> f1738_0_power_LE(x4:0) :|: x3:0 - 2 * x4:0 > -2 && x3:0 - 2 * x4:0 < 2 && x3:0 - 2 * x5:0 < 2 && x3:0 - 2 * x5:0 > -2 && x4:0 < x3:0 && x3:0 > 0 && x3:0 - 2 * x5:0 = 0 10.16/3.89 f1738_0_power_LE(x:0) -> f1738_0_power_LE'(x:0) :|: x:0 - 2 * x1:0 = 0 && x:0 > x2:0 && x:0 > 0 10.16/3.89 f1738_0_power_LE'(x9:0) -> f1738_0_power_LE(x10:0) :|: x9:0 - 2 * x10:0 > -2 && x9:0 - 2 * x10:0 < 2 && x9:0 - 2 * x11:0 < 2 && x9:0 - 2 * x11:0 > -2 && x9:0 - 2 * x11:0 = 1 && x9:0 > 0 && x9:0 > x10:0 10.16/3.89 10.16/3.89 ---------------------------------------- 10.16/3.89 10.16/3.89 (17) IntTRSCompressionProof (EQUIVALENT) 10.16/3.89 Compressed rules. 10.16/3.89 ---------------------------------------- 10.16/3.89 10.16/3.89 (18) 10.16/3.89 Obligation: 10.16/3.89 Rules: 10.16/3.89 f1738_0_power_LE'(x3:0:0) -> f1738_0_power_LE(x4:0:0) :|: x3:0:0 > 0 && x3:0:0 - 2 * x5:0:0 = 0 && x4:0:0 < x3:0:0 && x3:0:0 - 2 * x5:0:0 > -2 && x3:0:0 - 2 * x5:0:0 < 2 && x3:0:0 - 2 * x4:0:0 < 2 && x3:0:0 - 2 * x4:0:0 > -2 10.16/3.89 f1738_0_power_LE'(x9:0:0) -> f1738_0_power_LE(x10:0:0) :|: x9:0:0 > 0 && x9:0:0 > x10:0:0 && x9:0:0 - 2 * x11:0:0 = 1 && x9:0:0 - 2 * x11:0:0 > -2 && x9:0:0 - 2 * x11:0:0 < 2 && x9:0:0 - 2 * x10:0:0 < 2 && x9:0:0 - 2 * x10:0:0 > -2 10.16/3.89 f1738_0_power_LE(x6:0:0) -> f1738_0_power_LE'(x6:0:0) :|: x6:0:0 - 2 * x7:0:0 = 1 && x8:0:0 < x6:0:0 && x6:0:0 > 0 10.16/3.89 f1738_0_power_LE(x:0:0) -> f1738_0_power_LE'(x:0:0) :|: x:0:0 - 2 * x1:0:0 = 0 && x:0:0 > x2:0:0 && x:0:0 > 0 10.16/3.89 10.16/3.89 ---------------------------------------- 10.16/3.89 10.16/3.89 (19) PolynomialOrderProcessor (EQUIVALENT) 10.16/3.89 Found the following polynomial interpretation: 10.16/3.89 [f1738_0_power_LE'(x)] = x 10.16/3.89 [f1738_0_power_LE(x1)] = x1 10.16/3.89 10.16/3.89 The following rules are decreasing: 10.16/3.89 f1738_0_power_LE'(x3:0:0) -> f1738_0_power_LE(x4:0:0) :|: x3:0:0 > 0 && x3:0:0 - 2 * x5:0:0 = 0 && x4:0:0 < x3:0:0 && x3:0:0 - 2 * x5:0:0 > -2 && x3:0:0 - 2 * x5:0:0 < 2 && x3:0:0 - 2 * x4:0:0 < 2 && x3:0:0 - 2 * x4:0:0 > -2 10.16/3.89 f1738_0_power_LE'(x9:0:0) -> f1738_0_power_LE(x10:0:0) :|: x9:0:0 > 0 && x9:0:0 > x10:0:0 && x9:0:0 - 2 * x11:0:0 = 1 && x9:0:0 - 2 * x11:0:0 > -2 && x9:0:0 - 2 * x11:0:0 < 2 && x9:0:0 - 2 * x10:0:0 < 2 && x9:0:0 - 2 * x10:0:0 > -2 10.16/3.89 The following rules are bounded: 10.16/3.89 f1738_0_power_LE'(x3:0:0) -> f1738_0_power_LE(x4:0:0) :|: x3:0:0 > 0 && x3:0:0 - 2 * x5:0:0 = 0 && x4:0:0 < x3:0:0 && x3:0:0 - 2 * x5:0:0 > -2 && x3:0:0 - 2 * x5:0:0 < 2 && x3:0:0 - 2 * x4:0:0 < 2 && x3:0:0 - 2 * x4:0:0 > -2 10.16/3.89 f1738_0_power_LE'(x9:0:0) -> f1738_0_power_LE(x10:0:0) :|: x9:0:0 > 0 && x9:0:0 > x10:0:0 && x9:0:0 - 2 * x11:0:0 = 1 && x9:0:0 - 2 * x11:0:0 > -2 && x9:0:0 - 2 * x11:0:0 < 2 && x9:0:0 - 2 * x10:0:0 < 2 && x9:0:0 - 2 * x10:0:0 > -2 10.16/3.89 f1738_0_power_LE(x6:0:0) -> f1738_0_power_LE'(x6:0:0) :|: x6:0:0 - 2 * x7:0:0 = 1 && x8:0:0 < x6:0:0 && x6:0:0 > 0 10.16/3.89 f1738_0_power_LE(x:0:0) -> f1738_0_power_LE'(x:0:0) :|: x:0:0 - 2 * x1:0:0 = 0 && x:0:0 > x2:0:0 && x:0:0 > 0 10.16/3.89 10.16/3.89 ---------------------------------------- 10.16/3.89 10.16/3.89 (20) 10.16/3.89 Obligation: 10.16/3.89 Rules: 10.16/3.89 f1738_0_power_LE(x6:0:0) -> f1738_0_power_LE'(x6:0:0) :|: x6:0:0 - 2 * x7:0:0 = 1 && x8:0:0 < x6:0:0 && x6:0:0 > 0 10.16/3.89 f1738_0_power_LE(x:0:0) -> f1738_0_power_LE'(x:0:0) :|: x:0:0 - 2 * x1:0:0 = 0 && x:0:0 > x2:0:0 && x:0:0 > 0 10.16/3.89 10.16/3.89 ---------------------------------------- 10.16/3.89 10.16/3.89 (21) TerminationGraphProcessor (EQUIVALENT) 10.16/3.89 Constructed the termination graph and obtained no non-trivial SCC(s). 10.16/3.89 10.16/3.89 ---------------------------------------- 10.16/3.89 10.16/3.89 (22) 10.16/3.89 YES 10.16/3.95 EOF