12.12/4.14 YES 12.12/4.15 proof of /export/starexec/sandbox/benchmark/theBenchmark.jar 12.12/4.15 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 12.12/4.15 12.12/4.15 12.12/4.15 termination of the given Bare JBC problem could be proven: 12.12/4.15 12.12/4.15 (0) Bare JBC problem 12.12/4.15 (1) BareJBCToJBCProof [EQUIVALENT, 96 ms] 12.12/4.15 (2) JBC problem 12.12/4.15 (3) JBCToGraph [EQUIVALENT, 541 ms] 12.12/4.15 (4) JBCTerminationGraph 12.12/4.15 (5) TerminationGraphToSCCProof [SOUND, 0 ms] 12.12/4.15 (6) AND 12.12/4.15 (7) JBCTerminationSCC 12.12/4.15 (8) SCCToIRSProof [SOUND, 54 ms] 12.12/4.15 (9) IRSwT 12.12/4.15 (10) IRSFormatTransformerProof [EQUIVALENT, 0 ms] 12.12/4.15 (11) IRSwT 12.12/4.15 (12) IRSwTTerminationDigraphProof [EQUIVALENT, 19 ms] 12.12/4.15 (13) IRSwT 12.12/4.15 (14) IntTRSCompressionProof [EQUIVALENT, 0 ms] 12.12/4.15 (15) IRSwT 12.12/4.15 (16) TempFilterProof [SOUND, 23 ms] 12.12/4.15 (17) IntTRS 12.12/4.15 (18) PolynomialOrderProcessor [EQUIVALENT, 13 ms] 12.12/4.15 (19) YES 12.12/4.15 (20) JBCTerminationSCC 12.12/4.15 (21) SCCToIRSProof [SOUND, 16 ms] 12.12/4.15 (22) IRSwT 12.12/4.15 (23) IRSFormatTransformerProof [EQUIVALENT, 0 ms] 12.12/4.15 (24) IRSwT 12.12/4.15 (25) IRSwTTerminationDigraphProof [EQUIVALENT, 359 ms] 12.12/4.15 (26) IRSwT 12.12/4.15 (27) IntTRSCompressionProof [EQUIVALENT, 0 ms] 12.12/4.15 (28) IRSwT 12.12/4.15 (29) FilterProof [EQUIVALENT, 0 ms] 12.12/4.15 (30) IntTRS 12.12/4.15 (31) IntTRSCompressionProof [EQUIVALENT, 0 ms] 12.12/4.15 (32) IntTRS 12.12/4.15 (33) RankingReductionPairProof [EQUIVALENT, 27 ms] 12.12/4.15 (34) YES 12.12/4.15 12.12/4.15 12.12/4.15 ---------------------------------------- 12.12/4.15 12.12/4.15 (0) 12.12/4.15 Obligation: 12.12/4.15 need to prove termination of the following program: 12.12/4.15 /** 12.12/4.15 * Parts of the below code have been adapted from 12.12/4.15 * 12.12/4.15 * http://www0.cs.ucl.ac.uk/staff/p.ohearn/Talks/SAStalk.pdf 12.12/4.15 * 12.12/4.15 * Based on the motivating example of the paper 12.12/4.15 * 12.12/4.15 * Automatic termination proofs for programs with shape-shifting heaps 12.12/4.15 * Josh Berdine, Byron Cook, Dino Distefano, and Peter W. O’Hearn 12.12/4.15 * In Proc. CAV'06, LNCS 4144, pp. 386 - 400, 2006. 12.12/4.15 */ 12.12/4.15 public class Kernel95 { 12.12/4.15 /** 12.12/4.15 * A reference to the next list element. 12.12/4.15 */ 12.12/4.15 private Kernel95 next; 12.12/4.15 12.12/4.15 public static void main(String[] args) { 12.12/4.15 int random1 = args[0].length(); 12.12/4.15 int random2 = args[1].length(); 12.12/4.15 12.12/4.15 //slide68(random1, random2); 12.12/4.15 //slide88(random1, random2); 12.12/4.15 //slide93(random1, random2); 12.12/4.15 slide95(random1, random2); 12.12/4.15 } 12.12/4.15 12.12/4.15 /** 12.12/4.15 * Create a new list element. 12.12/4.15 * @param n a reference to the next element. 12.12/4.15 */ 12.12/4.15 public Kernel95(final Kernel95 n) { 12.12/4.15 this.next = n; 12.12/4.15 } 12.12/4.15 12.12/4.15 /** 12.12/4.15 * Create a new cyclical list of a length x. 12.12/4.15 * @param x some length 12.12/4.15 * @return cyclical list of length max(1, x) 12.12/4.15 */ 12.12/4.15 public static Kernel95 create(int x) { 12.12/4.15 Kernel95 last, current; 12.12/4.15 last = current = new Kernel95(null); 12.12/4.15 while (--x > 0) 12.12/4.15 current = new Kernel95(current); 12.12/4.15 return last.next = current; 12.12/4.15 } 12.12/4.15 12.12/4.15 /** 12.12/4.15 * Check if the last bit of x is > 0. 12.12/4.15 */ 12.12/4.15 private static boolean check(int x) { 12.12/4.15 return x % 2 > 0; 12.12/4.15 } 12.12/4.15 12.12/4.15 public static void slide68(int random1, int random2) { 12.12/4.15 Kernel95 h = create(random1); 12.12/4.15 Kernel95 p = h; 12.12/4.15 Kernel95 c = p.next; 12.12/4.15 while (c != h) { 12.12/4.15 Kernel95 o = c; 12.12/4.15 c = c.next; 12.12/4.15 if (check(random2)) { // nondet() 12.12/4.15 p.next = c; 12.12/4.15 //dispose(o); 12.12/4.15 o = null; 12.12/4.15 // Java's garbage collector will notice that the object 12.12/4.15 // previously referenced by o is not referenced any more 12.12/4.15 // and will release it (of course, in the next loop iteration 12.12/4.15 // this would happen anyway); obviously, this does not have 12.12/4.15 // quite the impact of a proper "dispose" operation, which 12.12/4.15 // also renders all other pointer invalid that happen to point 12.12/4.15 // to the same address 12.12/4.15 } else { 12.12/4.15 p = o; 12.12/4.15 } 12.12/4.15 12.12/4.15 // get a fresh random bit to the end of random2 12.12/4.15 random2 = random2 / 2; 12.12/4.15 } 12.12/4.15 } 12.12/4.15 12.12/4.15 public static void slide88(int random1, int random2) { 12.12/4.15 Kernel95 h = create(random1); 12.12/4.15 Kernel95 p = h; 12.12/4.15 Kernel95 c = p.next; 12.12/4.15 while (c != h) { 12.12/4.15 Kernel95 o = c; 12.12/4.15 //c = c.next; 12.12/4.15 if (check(random2)) { // nondet() 12.12/4.15 Kernel95 e = o.next; 12.12/4.15 p.next = e; 12.12/4.15 //dispose(o); 12.12/4.15 o = null; 12.12/4.15 // Java's garbage collector will notice that the object 12.12/4.15 // previously referenced by o is not referenced any more 12.12/4.15 // and will release it 12.12/4.15 c = o; 12.12/4.15 // for a faithful translation of the original C code, 12.12/4.15 // let c point to whatever o points to -- the interesting 12.12/4.15 // aspect is that dereferencing this memory location 12.12/4.15 // henceforth is a very bad idea (in C, obviously, this would 12.12/4.15 // not necessarily lead to a clean exception at runtime) 12.12/4.15 } else { 12.12/4.15 p = o; 12.12/4.15 } 12.12/4.15 c = c.next; 12.12/4.15 12.12/4.15 // get a fresh random bit to the end of random2 12.12/4.15 random2 = random2 / 2; 12.12/4.15 } 12.12/4.15 } 12.12/4.15 12.12/4.15 /** 12.12/4.15 * Non-terminating. 12.12/4.15 */ 12.12/4.15 public static void slide93(int random1, int random2) { 12.12/4.15 Kernel95 h = create(random1); 12.12/4.15 Kernel95 p = h; 12.12/4.15 Kernel95 c = p.next; 12.12/4.15 while (c != h) { 12.12/4.15 Kernel95 o = c; 12.12/4.15 //c = c.next; 12.12/4.15 12.12/4.15 if (check(random2)) { // nondet() 12.12/4.15 Kernel95 e = o.next; 12.12/4.15 p.next = e; 12.12/4.15 o.next = o; 12.12/4.15 } else { 12.12/4.15 p = o; 12.12/4.15 } 12.12/4.15 c = c.next; 12.12/4.15 12.12/4.15 // get a fresh random bit to the end of random2 12.12/4.15 random2 = random2 / 2; 12.12/4.15 } 12.12/4.15 } 12.12/4.15 12.12/4.15 public static void slide95(int random1, int random2) { 12.12/4.15 Kernel95 h = create(random1); 12.12/4.15 Kernel95 p = h; 12.12/4.15 Kernel95 c = p.next; 12.12/4.15 while (c != h) { 12.12/4.15 Kernel95 o = c; 12.12/4.15 c = c.next; 12.12/4.15 12.12/4.15 if (check(random2)) { // nondet() 12.12/4.15 Kernel95 e = o.next; 12.12/4.15 p.next = e; 12.12/4.15 o.next = o; 12.12/4.15 } else { 12.12/4.15 p = o; 12.12/4.15 } 12.12/4.15 12.12/4.15 // get a fresh random bit to the end of random2 12.12/4.15 random2 = random2 / 2; 12.12/4.15 } 12.12/4.15 } 12.12/4.15 12.12/4.15 } 12.12/4.15 12.12/4.15 12.12/4.15 12.12/4.15 ---------------------------------------- 12.12/4.15 12.12/4.15 (1) BareJBCToJBCProof (EQUIVALENT) 12.12/4.15 initialized classpath 12.12/4.15 ---------------------------------------- 12.12/4.15 12.12/4.15 (2) 12.12/4.15 Obligation: 12.12/4.15 need to prove termination of the following program: 12.12/4.15 /** 12.12/4.15 * Parts of the below code have been adapted from 12.12/4.15 * 12.12/4.15 * http://www0.cs.ucl.ac.uk/staff/p.ohearn/Talks/SAStalk.pdf 12.12/4.15 * 12.12/4.15 * Based on the motivating example of the paper 12.12/4.15 * 12.12/4.15 * Automatic termination proofs for programs with shape-shifting heaps 12.12/4.15 * Josh Berdine, Byron Cook, Dino Distefano, and Peter W. O’Hearn 12.12/4.15 * In Proc. CAV'06, LNCS 4144, pp. 386 - 400, 2006. 12.12/4.15 */ 12.12/4.15 public class Kernel95 { 12.12/4.15 /** 12.12/4.15 * A reference to the next list element. 12.12/4.15 */ 12.12/4.15 private Kernel95 next; 12.12/4.15 12.12/4.15 public static void main(String[] args) { 12.12/4.15 int random1 = args[0].length(); 12.12/4.15 int random2 = args[1].length(); 12.12/4.15 12.12/4.15 //slide68(random1, random2); 12.12/4.15 //slide88(random1, random2); 12.12/4.15 //slide93(random1, random2); 12.12/4.15 slide95(random1, random2); 12.12/4.15 } 12.12/4.15 12.12/4.15 /** 12.12/4.15 * Create a new list element. 12.12/4.15 * @param n a reference to the next element. 12.12/4.15 */ 12.12/4.15 public Kernel95(final Kernel95 n) { 12.12/4.15 this.next = n; 12.12/4.15 } 12.12/4.15 12.12/4.15 /** 12.12/4.15 * Create a new cyclical list of a length x. 12.12/4.15 * @param x some length 12.12/4.15 * @return cyclical list of length max(1, x) 12.12/4.15 */ 12.12/4.15 public static Kernel95 create(int x) { 12.12/4.15 Kernel95 last, current; 12.12/4.15 last = current = new Kernel95(null); 12.12/4.15 while (--x > 0) 12.12/4.15 current = new Kernel95(current); 12.12/4.15 return last.next = current; 12.12/4.15 } 12.12/4.15 12.12/4.15 /** 12.12/4.15 * Check if the last bit of x is > 0. 12.12/4.15 */ 12.12/4.15 private static boolean check(int x) { 12.12/4.15 return x % 2 > 0; 12.12/4.15 } 12.12/4.15 12.12/4.15 public static void slide68(int random1, int random2) { 12.12/4.15 Kernel95 h = create(random1); 12.12/4.15 Kernel95 p = h; 12.12/4.15 Kernel95 c = p.next; 12.12/4.15 while (c != h) { 12.12/4.15 Kernel95 o = c; 12.12/4.15 c = c.next; 12.12/4.15 if (check(random2)) { // nondet() 12.12/4.15 p.next = c; 12.12/4.15 //dispose(o); 12.12/4.15 o = null; 12.12/4.15 // Java's garbage collector will notice that the object 12.12/4.15 // previously referenced by o is not referenced any more 12.12/4.15 // and will release it (of course, in the next loop iteration 12.12/4.15 // this would happen anyway); obviously, this does not have 12.12/4.15 // quite the impact of a proper "dispose" operation, which 12.12/4.15 // also renders all other pointer invalid that happen to point 12.12/4.15 // to the same address 12.12/4.15 } else { 12.12/4.15 p = o; 12.12/4.15 } 12.12/4.15 12.12/4.15 // get a fresh random bit to the end of random2 12.12/4.15 random2 = random2 / 2; 12.12/4.15 } 12.12/4.15 } 12.12/4.15 12.12/4.15 public static void slide88(int random1, int random2) { 12.12/4.15 Kernel95 h = create(random1); 12.12/4.15 Kernel95 p = h; 12.12/4.15 Kernel95 c = p.next; 12.12/4.15 while (c != h) { 12.12/4.15 Kernel95 o = c; 12.12/4.15 //c = c.next; 12.12/4.15 if (check(random2)) { // nondet() 12.12/4.15 Kernel95 e = o.next; 12.12/4.15 p.next = e; 12.12/4.15 //dispose(o); 12.12/4.15 o = null; 12.12/4.15 // Java's garbage collector will notice that the object 12.12/4.15 // previously referenced by o is not referenced any more 12.12/4.15 // and will release it 12.12/4.15 c = o; 12.12/4.15 // for a faithful translation of the original C code, 12.12/4.15 // let c point to whatever o points to -- the interesting 12.12/4.15 // aspect is that dereferencing this memory location 12.12/4.15 // henceforth is a very bad idea (in C, obviously, this would 12.12/4.15 // not necessarily lead to a clean exception at runtime) 12.12/4.15 } else { 12.12/4.15 p = o; 12.12/4.15 } 12.12/4.15 c = c.next; 12.12/4.15 12.12/4.15 // get a fresh random bit to the end of random2 12.12/4.15 random2 = random2 / 2; 12.12/4.15 } 12.12/4.15 } 12.12/4.15 12.12/4.15 /** 12.12/4.15 * Non-terminating. 12.12/4.15 */ 12.12/4.15 public static void slide93(int random1, int random2) { 12.12/4.15 Kernel95 h = create(random1); 12.12/4.15 Kernel95 p = h; 12.12/4.15 Kernel95 c = p.next; 12.12/4.15 while (c != h) { 12.12/4.15 Kernel95 o = c; 12.12/4.15 //c = c.next; 12.12/4.15 12.12/4.15 if (check(random2)) { // nondet() 12.12/4.15 Kernel95 e = o.next; 12.12/4.15 p.next = e; 12.12/4.15 o.next = o; 12.12/4.15 } else { 12.12/4.15 p = o; 12.12/4.15 } 12.12/4.15 c = c.next; 12.12/4.15 12.12/4.15 // get a fresh random bit to the end of random2 12.12/4.15 random2 = random2 / 2; 12.12/4.15 } 12.12/4.15 } 12.12/4.15 12.12/4.15 public static void slide95(int random1, int random2) { 12.12/4.15 Kernel95 h = create(random1); 12.12/4.15 Kernel95 p = h; 12.12/4.15 Kernel95 c = p.next; 12.12/4.15 while (c != h) { 12.12/4.15 Kernel95 o = c; 12.12/4.15 c = c.next; 12.12/4.15 12.12/4.15 if (check(random2)) { // nondet() 12.12/4.15 Kernel95 e = o.next; 12.12/4.15 p.next = e; 12.12/4.15 o.next = o; 12.12/4.15 } else { 12.12/4.15 p = o; 12.12/4.15 } 12.12/4.15 12.12/4.15 // get a fresh random bit to the end of random2 12.12/4.15 random2 = random2 / 2; 12.12/4.15 } 12.12/4.15 } 12.12/4.15 12.12/4.15 } 12.12/4.15 12.12/4.15 12.12/4.15 12.12/4.15 ---------------------------------------- 12.12/4.15 12.12/4.15 (3) JBCToGraph (EQUIVALENT) 12.12/4.15 Constructed TerminationGraph. 12.12/4.15 ---------------------------------------- 12.12/4.15 12.12/4.15 (4) 12.12/4.15 Obligation: 12.12/4.15 Termination Graph based on JBC Program: 12.12/4.15 Kernel95.main([Ljava/lang/String;)V: Graph of 202 nodes with 1 SCC. 12.12/4.15 12.12/4.15 12.12/4.15 12.12/4.15 Kernel95.create(I)LKernel95;: Graph of 42 nodes with 1 SCC. 12.12/4.15 12.12/4.15 12.12/4.15 12.12/4.15 12.12/4.15 12.12/4.15 ---------------------------------------- 12.12/4.15 12.12/4.15 (5) TerminationGraphToSCCProof (SOUND) 12.12/4.15 Splitted TerminationGraph to 2 SCCss. 12.12/4.15 ---------------------------------------- 12.12/4.15 12.12/4.15 (6) 12.12/4.15 Complex Obligation (AND) 12.12/4.15 12.12/4.15 ---------------------------------------- 12.12/4.15 12.12/4.15 (7) 12.12/4.15 Obligation: 12.12/4.15 SCC of termination graph based on JBC Program. 12.12/4.15 SCC contains nodes from the following methods: Kernel95.create(I)LKernel95; 12.12/4.15 SCC calls the following helper methods: 12.12/4.15 Performed SCC analyses: 12.12/4.15 *Used field analysis yielded the following read fields: 12.12/4.15 12.12/4.15 *Marker field analysis yielded the following relations that could be markers: 12.12/4.15 12.12/4.15 ---------------------------------------- 12.12/4.15 12.12/4.15 (8) SCCToIRSProof (SOUND) 12.12/4.15 Transformed FIGraph SCCs to intTRSs. Log: 12.16/4.15 Generated rules. Obtained 17 IRulesP rules: 12.16/4.15 f796_0_create_Load(EOS(STATIC_796), i80, o74[Kernel95.next]o73) -> f798_0_create_LE(EOS(STATIC_798), i80, i80, o74[Kernel95.next]o73) :|: TRUE 12.16/4.15 f798_0_create_LE(EOS(STATIC_798), i82, i82, o74[Kernel95.next]o73) -> f801_0_create_LE(EOS(STATIC_801), i82, i82, o74[Kernel95.next]o73) :|: TRUE 12.16/4.15 f801_0_create_LE(EOS(STATIC_801), i82, i82, o74[Kernel95.next]o73) -> f804_0_create_New(EOS(STATIC_804), i82, o74[Kernel95.next]o73) :|: i82 > 0 12.16/4.15 f804_0_create_New(EOS(STATIC_804), i82, o74[Kernel95.next]o73) -> f810_0_create_Duplicate(EOS(STATIC_810), i82, o74[Kernel95.next]o73) :|: TRUE 12.16/4.15 f810_0_create_Duplicate(EOS(STATIC_810), i82, o74[Kernel95.next]o73) -> f816_0_create_Load(EOS(STATIC_816), i82, o74[Kernel95.next]o73) :|: TRUE 12.16/4.15 f816_0_create_Load(EOS(STATIC_816), i82, o74[Kernel95.next]o73) -> f818_0_create_InvokeMethod(EOS(STATIC_818), i82, o74[Kernel95.next]o73) :|: TRUE 12.16/4.15 f818_0_create_InvokeMethod(EOS(STATIC_818), i82, o74[Kernel95.next]o73) -> f828_0__init__Load(EOS(STATIC_828), i82, o74[Kernel95.next]o73) :|: TRUE 12.16/4.15 f828_0__init__Load(EOS(STATIC_828), i82, o74[Kernel95.next]o73) -> f850_0__init__InvokeMethod(EOS(STATIC_850), i82, o74[Kernel95.next]o73) :|: TRUE 12.16/4.15 f850_0__init__InvokeMethod(EOS(STATIC_850), i82, o74[Kernel95.next]o73) -> f866_0__init__Load(EOS(STATIC_866), i82, o74[Kernel95.next]o73) :|: TRUE 12.16/4.15 f866_0__init__Load(EOS(STATIC_866), i82, o74[Kernel95.next]o73) -> f901_0__init__Load(EOS(STATIC_901), i82, o74[Kernel95.next]o73) :|: TRUE 12.16/4.15 f901_0__init__Load(EOS(STATIC_901), i82, o74[Kernel95.next]o73) -> f905_0__init__FieldAccess(EOS(STATIC_905), i82, o74[Kernel95.next]o73) :|: TRUE 12.16/4.15 f905_0__init__FieldAccess(EOS(STATIC_905), i82, o74[Kernel95.next]o73) -> f910_0__init__Return(EOS(STATIC_910), i82, o74[Kernel95.next]o73) :|: TRUE 12.16/4.15 f910_0__init__Return(EOS(STATIC_910), i82, o74[Kernel95.next]o73) -> f915_0_create_Store(EOS(STATIC_915), i82, o74[Kernel95.next]o73) :|: TRUE 12.16/4.15 f915_0_create_Store(EOS(STATIC_915), i82, o74[Kernel95.next]o73) -> f920_0_create_JMP(EOS(STATIC_920), i82, o74[Kernel95.next]o73) :|: TRUE 12.16/4.15 f920_0_create_JMP(EOS(STATIC_920), i82, o74[Kernel95.next]o73) -> f1004_0_create_Inc(EOS(STATIC_1004), i82, o74[Kernel95.next]o73) :|: TRUE 12.16/4.15 f1004_0_create_Inc(EOS(STATIC_1004), i82, o74[Kernel95.next]o73) -> f785_0_create_Inc(EOS(STATIC_785), i82, o82[Kernel95.next]o73) :|: TRUE 12.16/4.15 f785_0_create_Inc(EOS(STATIC_785), i54, o74[Kernel95.next]o73) -> f796_0_create_Load(EOS(STATIC_796), i54 + -1, o74[Kernel95.next]o73) :|: TRUE 12.16/4.15 Combined rules. Obtained 1 IRulesP rules: 12.16/4.15 f796_0_create_Load(EOS(STATIC_796), i80:0, o74[Kernel95.next]o73:0) -> f796_0_create_Load(EOS(STATIC_796), i80:0 - 1, o82[Kernel95.next]o73:0) :|: i80:0 > 0 12.16/4.15 Filtered constant ground arguments: 12.16/4.15 f796_0_create_Load(x1, x2, x3) -> f796_0_create_Load(x2, x3) 12.16/4.15 EOS(x1) -> EOS 12.16/4.15 Filtered unneeded arguments: 12.16/4.15 f796_0_create_Load(x1, x2) -> f796_0_create_Load(x1) 12.16/4.15 Finished conversion. Obtained 1 rules.P rules: 12.16/4.15 f796_0_create_Load(i80:0) -> f796_0_create_Load(i80:0 - 1) :|: i80:0 > 0 12.16/4.15 12.16/4.15 ---------------------------------------- 12.16/4.15 12.16/4.15 (9) 12.16/4.15 Obligation: 12.16/4.15 Rules: 12.16/4.15 f796_0_create_Load(i80:0) -> f796_0_create_Load(i80:0 - 1) :|: i80:0 > 0 12.16/4.15 12.16/4.15 ---------------------------------------- 12.16/4.15 12.16/4.15 (10) IRSFormatTransformerProof (EQUIVALENT) 12.16/4.15 Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). 12.16/4.15 ---------------------------------------- 12.16/4.15 12.16/4.15 (11) 12.16/4.15 Obligation: 12.16/4.15 Rules: 12.16/4.15 f796_0_create_Load(i80:0) -> f796_0_create_Load(arith) :|: i80:0 > 0 && arith = i80:0 - 1 12.16/4.15 12.16/4.15 ---------------------------------------- 12.16/4.15 12.16/4.15 (12) IRSwTTerminationDigraphProof (EQUIVALENT) 12.16/4.15 Constructed termination digraph! 12.16/4.15 Nodes: 12.16/4.15 (1) f796_0_create_Load(i80:0) -> f796_0_create_Load(arith) :|: i80:0 > 0 && arith = i80:0 - 1 12.16/4.15 12.16/4.15 Arcs: 12.16/4.15 (1) -> (1) 12.16/4.15 12.16/4.15 This digraph is fully evaluated! 12.16/4.15 ---------------------------------------- 12.16/4.15 12.16/4.15 (13) 12.16/4.15 Obligation: 12.16/4.15 12.16/4.15 Termination digraph: 12.16/4.15 Nodes: 12.16/4.15 (1) f796_0_create_Load(i80:0) -> f796_0_create_Load(arith) :|: i80:0 > 0 && arith = i80:0 - 1 12.16/4.15 12.16/4.15 Arcs: 12.16/4.15 (1) -> (1) 12.16/4.15 12.16/4.15 This digraph is fully evaluated! 12.16/4.15 12.16/4.15 ---------------------------------------- 12.16/4.15 12.16/4.15 (14) IntTRSCompressionProof (EQUIVALENT) 12.16/4.15 Compressed rules. 12.16/4.15 ---------------------------------------- 12.16/4.15 12.16/4.15 (15) 12.16/4.15 Obligation: 12.16/4.15 Rules: 12.16/4.15 f796_0_create_Load(i80:0:0) -> f796_0_create_Load(i80:0:0 - 1) :|: i80:0:0 > 0 12.16/4.15 12.16/4.15 ---------------------------------------- 12.16/4.15 12.16/4.15 (16) TempFilterProof (SOUND) 12.16/4.15 Used the following sort dictionary for filtering: 12.16/4.15 f796_0_create_Load(INTEGER) 12.16/4.15 Replaced non-predefined constructor symbols by 0. 12.16/4.15 ---------------------------------------- 12.16/4.15 12.16/4.15 (17) 12.16/4.15 Obligation: 12.16/4.15 Rules: 12.16/4.15 f796_0_create_Load(i80:0:0) -> f796_0_create_Load(c) :|: c = i80:0:0 - 1 && i80:0:0 > 0 12.16/4.15 12.16/4.15 ---------------------------------------- 12.16/4.15 12.16/4.15 (18) PolynomialOrderProcessor (EQUIVALENT) 12.16/4.15 Found the following polynomial interpretation: 12.16/4.15 [f796_0_create_Load(x)] = x 12.16/4.15 12.16/4.15 The following rules are decreasing: 12.16/4.15 f796_0_create_Load(i80:0:0) -> f796_0_create_Load(c) :|: c = i80:0:0 - 1 && i80:0:0 > 0 12.16/4.15 The following rules are bounded: 12.16/4.15 f796_0_create_Load(i80:0:0) -> f796_0_create_Load(c) :|: c = i80:0:0 - 1 && i80:0:0 > 0 12.16/4.15 12.16/4.15 ---------------------------------------- 12.16/4.15 12.16/4.15 (19) 12.16/4.15 YES 12.16/4.15 12.16/4.15 ---------------------------------------- 12.16/4.15 12.16/4.15 (20) 12.16/4.15 Obligation: 12.16/4.15 SCC of termination graph based on JBC Program. 12.16/4.15 SCC contains nodes from the following methods: Kernel95.main([Ljava/lang/String;)V 12.16/4.15 SCC calls the following helper methods: 12.16/4.15 Performed SCC analyses: 12.16/4.15 *Used field analysis yielded the following read fields: 12.16/4.15 *Kernel95: [next] 12.16/4.15 *Marker field analysis yielded the following relations that could be markers: 12.16/4.15 12.16/4.15 ---------------------------------------- 12.16/4.15 12.16/4.15 (21) SCCToIRSProof (SOUND) 12.16/4.15 Transformed FIGraph SCCs to intTRSs. Log: 12.16/4.15 Generated rules. Obtained 59 IRulesP rules: 12.16/4.15 f2176_0_slide95_EQ(EOS(STATIC_2176), i187, o498[Kernel95.next]o498, o500[Kernel95.next]o499, o500[Kernel95.next]o498, o500[Kernel95.next]o497) -> f2180_0_slide95_Load(EOS(STATIC_2180), i187, o498[Kernel95.next]o498, o500[Kernel95.next]o499, o500[Kernel95.next]o498, o500[Kernel95.next]o497) :|: TRUE 12.16/4.15 f2180_0_slide95_Load(EOS(STATIC_2180), i187, o498[Kernel95.next]o498, o500[Kernel95.next]o499, o500[Kernel95.next]o498, o500[Kernel95.next]o497) -> f2188_0_slide95_Store(EOS(STATIC_2188), i187, o498[Kernel95.next]o498, o500[Kernel95.next]o499, o500[Kernel95.next]o498, o500[Kernel95.next]o497) :|: TRUE 12.16/4.15 f2188_0_slide95_Store(EOS(STATIC_2188), i187, o498[Kernel95.next]o498, o500[Kernel95.next]o499, o500[Kernel95.next]o498, o500[Kernel95.next]o497) -> f2191_0_slide95_Load(EOS(STATIC_2191), i187, o498[Kernel95.next]o498, o500[Kernel95.next]o499, o500[Kernel95.next]o498, o500[Kernel95.next]o497) :|: TRUE 12.16/4.15 f2191_0_slide95_Load(EOS(STATIC_2191), i187, o498[Kernel95.next]o498, o500[Kernel95.next]o499, o500[Kernel95.next]o498, o500[Kernel95.next]o497) -> f2194_0_slide95_FieldAccess(EOS(STATIC_2194), i187, o498[Kernel95.next]o498, o500[Kernel95.next]o499, o500[Kernel95.next]o498, o500[Kernel95.next]o497) :|: TRUE 12.16/4.15 f2194_0_slide95_FieldAccess(EOS(STATIC_2194), i187, o498[Kernel95.next]o498, o540[Kernel95.next]o499, o540[Kernel95.next]o498, o540[Kernel95.next]o497) -> f2202_0_slide95_FieldAccess(EOS(STATIC_2202), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) :|: o541[Kernel95.next]o499 < o540[Kernel95.next]o499 && o540[Kernel95.next]o499 >= 0 && o541[Kernel95.next]o497 < o540[Kernel95.next]o497 && o540[Kernel95.next]o497 >= 0 12.16/4.15 f2202_0_slide95_FieldAccess(EOS(STATIC_2202), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) -> f2205_0_slide95_Store(EOS(STATIC_2205), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) :|: TRUE 12.16/4.15 f2205_0_slide95_Store(EOS(STATIC_2205), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) -> f2208_0_slide95_Load(EOS(STATIC_2208), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) :|: TRUE 12.16/4.15 f2208_0_slide95_Load(EOS(STATIC_2208), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) -> f2209_0_slide95_InvokeMethod(EOS(STATIC_2209), i187, i187, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) :|: TRUE 12.16/4.15 f2209_0_slide95_InvokeMethod(EOS(STATIC_2209), i187, i187, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) -> f2210_0_check_Load(EOS(STATIC_2210), i187, i187, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) :|: TRUE 12.16/4.15 f2210_0_check_Load(EOS(STATIC_2210), i187, i187, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) -> f2211_0_check_ConstantStackPush(EOS(STATIC_2211), i187, i187, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) :|: TRUE 12.16/4.15 f2211_0_check_ConstantStackPush(EOS(STATIC_2211), i187, i187, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) -> f2212_0_check_IntArithmetic(EOS(STATIC_2212), i187, i187, 2, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) :|: TRUE 12.16/4.15 f2212_0_check_IntArithmetic(EOS(STATIC_2212), i187, i187, matching1, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) -> f2213_0_check_LE(EOS(STATIC_2213), i187, i187 % 2, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) :|: TRUE && matching1 = 2 12.16/4.15 f2213_0_check_LE(EOS(STATIC_2213), i187, matching1, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) -> f2214_0_check_LE(EOS(STATIC_2214), i187, 0, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) :|: TRUE && matching1 = 0 12.16/4.15 f2213_0_check_LE(EOS(STATIC_2213), i187, matching1, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) -> f2215_0_check_LE(EOS(STATIC_2215), i187, 1, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) :|: TRUE && matching1 = 1 12.16/4.15 f2214_0_check_LE(EOS(STATIC_2214), i187, matching1, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) -> f2216_0_check_ConstantStackPush(EOS(STATIC_2216), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) :|: 0 <= 0 && matching1 = 0 12.16/4.15 f2216_0_check_ConstantStackPush(EOS(STATIC_2216), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) -> f2218_0_check_Return(EOS(STATIC_2218), i187, 0, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) :|: TRUE 12.16/4.15 f2218_0_check_Return(EOS(STATIC_2218), i187, matching1, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) -> f2221_0_slide95_EQ(EOS(STATIC_2221), i187, 0, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) :|: TRUE && matching1 = 0 12.16/4.15 f2221_0_slide95_EQ(EOS(STATIC_2221), i187, matching1, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) -> f2228_0_slide95_Load(EOS(STATIC_2228), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o497, o541[Kernel95.next]o540) :|: o541[Kernel95.next]o540 > o541[Kernel95.next]o499 && o541[Kernel95.next]o499 >= 0 && matching1 = 0 12.16/4.15 f2228_0_slide95_Load(EOS(STATIC_2228), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o497, o541[Kernel95.next]o540) -> f2236_0_slide95_Store(EOS(STATIC_2236), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o497, o541[Kernel95.next]o540) :|: TRUE 12.16/4.15 f2236_0_slide95_Store(EOS(STATIC_2236), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o497, o541[Kernel95.next]o540) -> f2240_0_slide95_Load(EOS(STATIC_2240), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o497, o541[Kernel95.next]o540) :|: TRUE 12.16/4.15 f2240_0_slide95_Load(EOS(STATIC_2240), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o497, o541[Kernel95.next]o540) -> f2374_0_slide95_Load(EOS(STATIC_2374), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o497, o541[Kernel95.next]o540) :|: TRUE 12.16/4.15 f2374_0_slide95_Load(EOS(STATIC_2374), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o497, o541[Kernel95.next]o499) -> f2398_0_slide95_ConstantStackPush(EOS(STATIC_2398), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o497, o541[Kernel95.next]o499) :|: TRUE 12.16/4.15 f2398_0_slide95_ConstantStackPush(EOS(STATIC_2398), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o497, o541[Kernel95.next]o499) -> f2402_0_slide95_IntArithmetic(EOS(STATIC_2402), i187, 2, o498[Kernel95.next]o498, o541[Kernel95.next]o497, o541[Kernel95.next]o499) :|: TRUE 12.16/4.15 f2402_0_slide95_IntArithmetic(EOS(STATIC_2402), i187, matching1, o498[Kernel95.next]o498, o541[Kernel95.next]o497, o541[Kernel95.next]o499) -> f2411_0_slide95_Store(EOS(STATIC_2411), i214, o498[Kernel95.next]o498, o541[Kernel95.next]o497, o541[Kernel95.next]o499) :|: i214 = i187 / 2 && i214 <= i187 && matching1 = 2 12.16/4.15 f2411_0_slide95_Store(EOS(STATIC_2411), i214, o498[Kernel95.next]o498, o541[Kernel95.next]o497, o541[Kernel95.next]o499) -> f2418_0_slide95_JMP(EOS(STATIC_2418), i214, o498[Kernel95.next]o498, o541[Kernel95.next]o497, o541[Kernel95.next]o499) :|: TRUE 12.16/4.15 f2418_0_slide95_JMP(EOS(STATIC_2418), i214, o498[Kernel95.next]o498, o541[Kernel95.next]o497, o541[Kernel95.next]o499) -> f2454_0_slide95_Load(EOS(STATIC_2454), i214, o498[Kernel95.next]o498, o541[Kernel95.next]o497, o541[Kernel95.next]o499) :|: TRUE 12.16/4.15 f2454_0_slide95_Load(EOS(STATIC_2454), i214, o498[Kernel95.next]o498, o541[Kernel95.next]o497, o541[Kernel95.next]o499) -> f2100_0_slide95_Load(EOS(STATIC_2100), i214, o498[Kernel95.next]o498, o541[Kernel95.next]o497, o541[Kernel95.next]o499, o541[Kernel95.next]o498) :|: TRUE 12.16/4.15 f2100_0_slide95_Load(EOS(STATIC_2100), i187, o498[Kernel95.next]o498, o500[Kernel95.next]o497, o500[Kernel95.next]o499, o500[Kernel95.next]o498) -> f2120_0_slide95_Load(EOS(STATIC_2120), i187, o498[Kernel95.next]o498, o500[Kernel95.next]o497, o500[Kernel95.next]o499, o500[Kernel95.next]o498) :|: TRUE 12.16/4.15 f2120_0_slide95_Load(EOS(STATIC_2120), i187, o498[Kernel95.next]o498, o500[Kernel95.next]o497, o500[Kernel95.next]o499, o500[Kernel95.next]o498) -> f2151_0_slide95_EQ(EOS(STATIC_2151), i187, o498[Kernel95.next]o498, o500[Kernel95.next]o497, o500[Kernel95.next]o499, o500[Kernel95.next]o498) :|: TRUE 12.16/4.15 f2151_0_slide95_EQ(EOS(STATIC_2151), i187, o498[Kernel95.next]o498, o500[Kernel95.next]o497, o500[Kernel95.next]o499, o500[Kernel95.next]o498) -> f2176_0_slide95_EQ(EOS(STATIC_2176), i187, o498[Kernel95.next]o498, o500[Kernel95.next]o499, o500[Kernel95.next]o498, o500[Kernel95.next]o497) :|: o500[Kernel95.next]o497 > 0 12.16/4.15 f2215_0_check_LE(EOS(STATIC_2215), i187, matching1, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) -> f2217_0_check_ConstantStackPush(EOS(STATIC_2217), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) :|: 1 > 0 && matching1 = 1 12.16/4.15 f2217_0_check_ConstantStackPush(EOS(STATIC_2217), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) -> f2219_0_check_JMP(EOS(STATIC_2219), i187, 1, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) :|: TRUE 12.16/4.15 f2219_0_check_JMP(EOS(STATIC_2219), i187, matching1, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) -> f2225_0_check_Return(EOS(STATIC_2225), i187, 1, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) :|: TRUE && matching1 = 1 12.16/4.15 f2225_0_check_Return(EOS(STATIC_2225), i187, matching1, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) -> f2233_0_slide95_EQ(EOS(STATIC_2233), i187, 1, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) :|: TRUE && matching1 = 1 12.16/4.15 f2233_0_slide95_EQ(EOS(STATIC_2233), i187, matching1, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) -> f2239_0_slide95_Load(EOS(STATIC_2239), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) :|: 1 > 0 && matching1 = 1 12.16/4.15 f2239_0_slide95_Load(EOS(STATIC_2239), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) -> f2241_0_slide95_FieldAccess(EOS(STATIC_2241), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) :|: TRUE 12.16/4.15 f2241_0_slide95_FieldAccess(EOS(STATIC_2241), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) -> f2243_0_slide95_Store(EOS(STATIC_2243), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) :|: TRUE 12.16/4.15 f2243_0_slide95_Store(EOS(STATIC_2243), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) -> f2245_0_slide95_Load(EOS(STATIC_2245), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) :|: TRUE 12.16/4.15 f2245_0_slide95_Load(EOS(STATIC_2245), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) -> f2247_0_slide95_Load(EOS(STATIC_2247), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) :|: TRUE 12.16/4.15 f2247_0_slide95_Load(EOS(STATIC_2247), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) -> f2249_0_slide95_FieldAccess(EOS(STATIC_2249), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) :|: TRUE 12.16/4.15 f2249_0_slide95_FieldAccess(EOS(STATIC_2249), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o499, o541[Kernel95.next]o497) -> f2276_0_slide95_FieldAccess(EOS(STATIC_2276), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o497, o541[Kernel95.next]o499) :|: o541[Kernel95.next]o499 > 0 12.16/4.15 f2276_0_slide95_FieldAccess(EOS(STATIC_2276), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o497, o541[Kernel95.next]o499) -> f2296_0_slide95_FieldAccess(EOS(STATIC_2296), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o497, o541[Kernel95.next]o499) :|: TRUE 12.16/4.15 f2276_0_slide95_FieldAccess(EOS(STATIC_2276), i187, o559[Kernel95.next]o559, o541[Kernel95.next]o556, o541[Kernel95.next]o556) -> f2297_0_slide95_FieldAccess(EOS(STATIC_2297), i187, o541[Kernel95.next]o556) :|: TRUE 12.16/4.15 f2296_0_slide95_FieldAccess(EOS(STATIC_2296), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o497, o541[Kernel95.next]o499) -> f2321_0_slide95_Load(EOS(STATIC_2321), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o497new, o541[Kernel95.next]o499) :|: o541[Kernel95.next]o497new <= o541[Kernel95.next]o497 && o541[Kernel95.next]o497 >= 0 12.16/4.15 f2321_0_slide95_Load(EOS(STATIC_2321), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o497, o541[Kernel95.next]o499) -> f2331_0_slide95_Load(EOS(STATIC_2331), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o497, o541[Kernel95.next]o499) :|: TRUE 12.16/4.15 f2331_0_slide95_Load(EOS(STATIC_2331), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o497, o541[Kernel95.next]o499) -> f2336_0_slide95_FieldAccess(EOS(STATIC_2336), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o497, o541[Kernel95.next]o499) :|: TRUE 12.16/4.15 f2336_0_slide95_FieldAccess(EOS(STATIC_2336), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o497, o541[Kernel95.next]o499) -> f2346_0_slide95_JMP(EOS(STATIC_2346), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o497, o541[Kernel95.next]o499) :|: TRUE 12.16/4.15 f2346_0_slide95_JMP(EOS(STATIC_2346), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o497, o541[Kernel95.next]o499) -> f2374_0_slide95_Load(EOS(STATIC_2374), i187, o498[Kernel95.next]o498, o541[Kernel95.next]o497, o541[Kernel95.next]o499) :|: TRUE 12.16/4.15 f2297_0_slide95_FieldAccess(EOS(STATIC_2297), i187, o541[Kernel95.next]o556) -> f2328_0_slide95_Load(EOS(STATIC_2328), i187, o541[Kernel95.next]o556) :|: TRUE 12.16/4.15 f2328_0_slide95_Load(EOS(STATIC_2328), i187, o541[Kernel95.next]o556) -> f2335_0_slide95_Load(EOS(STATIC_2335), i187, o541[Kernel95.next]o556) :|: TRUE 12.16/4.15 f2335_0_slide95_Load(EOS(STATIC_2335), i187, o541[Kernel95.next]o556) -> f2338_0_slide95_FieldAccess(EOS(STATIC_2338), i187, o541[Kernel95.next]o556) :|: TRUE 12.16/4.15 f2338_0_slide95_FieldAccess(EOS(STATIC_2338), i187, o541[Kernel95.next]o556) -> f2352_0_slide95_JMP(EOS(STATIC_2352), i187, o541[Kernel95.next]o556) :|: TRUE 12.16/4.15 f2352_0_slide95_JMP(EOS(STATIC_2352), i187, o541[Kernel95.next]o556) -> f2395_0_slide95_Load(EOS(STATIC_2395), i187, o541[Kernel95.next]o556) :|: TRUE 12.16/4.15 f2395_0_slide95_Load(EOS(STATIC_2395), i187, o541[Kernel95.next]o556) -> f2400_0_slide95_ConstantStackPush(EOS(STATIC_2400), i187, o541[Kernel95.next]o556) :|: TRUE 12.16/4.15 f2400_0_slide95_ConstantStackPush(EOS(STATIC_2400), i187, o541[Kernel95.next]o556) -> f2408_0_slide95_IntArithmetic(EOS(STATIC_2408), i187, 2, o541[Kernel95.next]o556) :|: TRUE 12.16/4.15 f2408_0_slide95_IntArithmetic(EOS(STATIC_2408), i187, matching1, o541[Kernel95.next]o556) -> f2416_0_slide95_Store(EOS(STATIC_2416), i215, o541[Kernel95.next]o556) :|: i215 = i187 / 2 && i215 <= i187 && matching1 = 2 12.16/4.15 f2416_0_slide95_Store(EOS(STATIC_2416), i215, o541[Kernel95.next]o556) -> f2423_0_slide95_JMP(EOS(STATIC_2423), i215, o541[Kernel95.next]o556) :|: TRUE 12.16/4.15 f2423_0_slide95_JMP(EOS(STATIC_2423), i215, o541[Kernel95.next]o556) -> f2517_0_slide95_Load(EOS(STATIC_2517), i215, o541[Kernel95.next]o556) :|: TRUE 12.16/4.15 f2517_0_slide95_Load(EOS(STATIC_2517), i215, o541[Kernel95.next]o556) -> f2100_0_slide95_Load(EOS(STATIC_2100), i215, o541[Kernel95.next]o541, o541[Kernel95.next]o556, o541[Kernel95.next]o556, o541[Kernel95.next]o541) :|: o541[Kernel95.next]o541 = 0 12.16/4.15 Combined rules. Obtained 6 IRulesP rules: 12.16/4.15 f2176_0_slide95_EQ(EOS(STATIC_2176), i187:0, o498[Kernel95.next]o498:0, o500[Kernel95.next]o499:0, o500[Kernel95.next]o498:0, o500[Kernel95.next]o497:0) -> f2176_0_slide95_EQ'(EOS(STATIC_2176), i187:0, o498[Kernel95.next]o498:0, o500[Kernel95.next]o499:0, o500[Kernel95.next]o498:0, o500[Kernel95.next]o497:0) :|: o500[Kernel95.next]o499:0 > -1 && o541[Kernel95.next]o499:0 < o500[Kernel95.next]o499:0 && o541[Kernel95.next]o497:0 < o500[Kernel95.next]o497:0 && o500[Kernel95.next]o497:0 > -1 && i187:0 - 2 * div = 1 && i187:0 >= div1 && o541[Kernel95.next]o499:0 > 0 && o541[Kernel95.next]o497:0 > -1 && o541[Kernel95.next]o497new:0 > 0 && o541[Kernel95.next]o497new:0 <= o541[Kernel95.next]o497:0 12.16/4.15 f2176_0_slide95_EQ'(EOS(STATIC_2176), i187:0, o498[Kernel95.next]o498:0, o500[Kernel95.next]o499:0, o500[Kernel95.next]o498:0, o500[Kernel95.next]o497:0) -> f2176_0_slide95_EQ(EOS(STATIC_2176), div1, o498[Kernel95.next]o498:0, o541[Kernel95.next]o499:0, o541[Kernel95.next]o498:0, o541[Kernel95.next]o497new:0) :|: o500[Kernel95.next]o499:0 > -1 && o541[Kernel95.next]o499:0 < o500[Kernel95.next]o499:0 && o541[Kernel95.next]o497:0 < o500[Kernel95.next]o497:0 && o500[Kernel95.next]o497:0 > -1 && i187:0 - 2 * div = 1 && i187:0 >= div1 && o541[Kernel95.next]o499:0 > 0 && o541[Kernel95.next]o497:0 > -1 && o541[Kernel95.next]o497new:0 <= o541[Kernel95.next]o497:0 && o541[Kernel95.next]o497new:0 > 0 && i187:0 - 2 * div > -2 && i187:0 - 2 * div < 2 && i187:0 - 2 * div1 < 2 && i187:0 - 2 * div1 > -2 12.16/4.15 f2176_0_slide95_EQ(EOS(STATIC_2176), i187:0, o498[Kernel95.next]o498:0, o500[Kernel95.next]o499:0, o500[Kernel95.next]o498:0, o500[Kernel95.next]o497:0) -> f2176_0_slide95_EQ'(EOS(STATIC_2176), i187:0, o498[Kernel95.next]o498:0, o500[Kernel95.next]o499:0, o500[Kernel95.next]o498:0, o500[Kernel95.next]o497:0) :|: o500[Kernel95.next]o499:0 > -1 && o541[Kernel95.next]o497:0 < o500[Kernel95.next]o499:0 && o541[Kernel95.next]o497:0 < o500[Kernel95.next]o497:0 && o500[Kernel95.next]o497:0 > -1 && i187:0 - 2 * div = 1 && o541[Kernel95.next]o497:0 > 0 && i187:0 >= div1 12.16/4.15 f2176_0_slide95_EQ'(EOS(STATIC_2176), i187:0, o498[Kernel95.next]o498:0, o500[Kernel95.next]o499:0, o500[Kernel95.next]o498:0, o500[Kernel95.next]o497:0) -> f2176_0_slide95_EQ(EOS(STATIC_2176), div1, 0, o541[Kernel95.next]o497:0, 0, o541[Kernel95.next]o497:0) :|: o500[Kernel95.next]o499:0 > -1 && o541[Kernel95.next]o497:0 < o500[Kernel95.next]o499:0 && o541[Kernel95.next]o497:0 < o500[Kernel95.next]o497:0 && o500[Kernel95.next]o497:0 > -1 && i187:0 - 2 * div = 1 && o541[Kernel95.next]o497:0 > 0 && i187:0 >= div1 && i187:0 - 2 * div > -2 && i187:0 - 2 * div < 2 && i187:0 - 2 * div1 < 2 && i187:0 - 2 * div1 > -2 12.16/4.15 f2176_0_slide95_EQ(EOS(STATIC_2176), i187:0, o498[Kernel95.next]o498:0, o500[Kernel95.next]o499:0, o500[Kernel95.next]o498:0, o500[Kernel95.next]o497:0) -> f2176_0_slide95_EQ'(EOS(STATIC_2176), i187:0, o498[Kernel95.next]o498:0, o500[Kernel95.next]o499:0, o500[Kernel95.next]o498:0, o500[Kernel95.next]o497:0) :|: o500[Kernel95.next]o499:0 > -1 && o541[Kernel95.next]o499:0 < o500[Kernel95.next]o499:0 && o541[Kernel95.next]o497:0 < o500[Kernel95.next]o497:0 && o500[Kernel95.next]o497:0 > -1 && i187:0 - 2 * div = 0 && o541[Kernel95.next]o499:0 > -1 && o541[Kernel95.next]o540:0 > o541[Kernel95.next]o499:0 && o541[Kernel95.next]o497:0 > 0 && i187:0 >= div1 12.16/4.15 f2176_0_slide95_EQ'(EOS(STATIC_2176), i187:0, o498[Kernel95.next]o498:0, o500[Kernel95.next]o499:0, o500[Kernel95.next]o498:0, o500[Kernel95.next]o497:0) -> f2176_0_slide95_EQ(EOS(STATIC_2176), div1, o498[Kernel95.next]o498:0, o541[Kernel95.next]o540:0, o541[Kernel95.next]o498:0, o541[Kernel95.next]o497:0) :|: o500[Kernel95.next]o499:0 > -1 && o541[Kernel95.next]o499:0 < o500[Kernel95.next]o499:0 && o541[Kernel95.next]o497:0 < o500[Kernel95.next]o497:0 && o500[Kernel95.next]o497:0 > -1 && i187:0 - 2 * div = 0 && o541[Kernel95.next]o499:0 > -1 && o541[Kernel95.next]o540:0 > o541[Kernel95.next]o499:0 && i187:0 >= div1 && o541[Kernel95.next]o497:0 > 0 && i187:0 - 2 * div > -2 && i187:0 - 2 * div < 2 && i187:0 - 2 * div1 < 2 && i187:0 - 2 * div1 > -2 12.16/4.15 Filtered constant ground arguments: 12.16/4.15 f2176_0_slide95_EQ(x1, x2, x3, x4, x5, x6) -> f2176_0_slide95_EQ(x2, x3, x4, x5, x6) 12.16/4.15 f2176_0_slide95_EQ'(x1, x2, x3, x4, x5, x6) -> f2176_0_slide95_EQ'(x2, x3, x4, x5, x6) 12.16/4.15 EOS(x1) -> EOS 12.16/4.15 Filtered unneeded arguments: 12.16/4.15 f2176_0_slide95_EQ(x1, x2, x3, x4, x5) -> f2176_0_slide95_EQ(x1, x3, x5) 12.16/4.15 f2176_0_slide95_EQ'(x1, x2, x3, x4, x5) -> f2176_0_slide95_EQ'(x1, x3, x5) 12.16/4.15 Finished conversion. Obtained 6 rules.P rules: 12.16/4.15 f2176_0_slide95_EQ(i187:0, o500[Kernel95.next]o499:0, o500[Kernel95.next]o497:0) -> f2176_0_slide95_EQ'(i187:0, o500[Kernel95.next]o499:0, o500[Kernel95.next]o497:0) :|: o541[Kernel95.next]o499:0 < o500[Kernel95.next]o499:0 && o500[Kernel95.next]o499:0 > -1 && o541[Kernel95.next]o497:0 < o500[Kernel95.next]o497:0 && o500[Kernel95.next]o497:0 > -1 && i187:0 - 2 * div = 1 && i187:0 >= div1 && o541[Kernel95.next]o499:0 > 0 && o541[Kernel95.next]o497:0 > -1 && o541[Kernel95.next]o497new:0 <= o541[Kernel95.next]o497:0 && o541[Kernel95.next]o497new:0 > 0 12.16/4.15 f2176_0_slide95_EQ'(i187:0, o500[Kernel95.next]o499:0, o500[Kernel95.next]o497:0) -> f2176_0_slide95_EQ(div1, o541[Kernel95.next]o499:0, o541[Kernel95.next]o497new:0) :|: o541[Kernel95.next]o499:0 < o500[Kernel95.next]o499:0 && o500[Kernel95.next]o499:0 > -1 && o541[Kernel95.next]o497:0 < o500[Kernel95.next]o497:0 && o500[Kernel95.next]o497:0 > -1 && i187:0 - 2 * div = 1 && i187:0 >= div1 && o541[Kernel95.next]o499:0 > 0 && o541[Kernel95.next]o497:0 > -1 && o541[Kernel95.next]o497new:0 <= o541[Kernel95.next]o497:0 && o541[Kernel95.next]o497new:0 > 0 && i187:0 - 2 * div > -2 && i187:0 - 2 * div < 2 && i187:0 - 2 * div1 > -2 && i187:0 - 2 * div1 < 2 12.16/4.15 f2176_0_slide95_EQ(i187:0, o500[Kernel95.next]o499:0, o500[Kernel95.next]o497:0) -> f2176_0_slide95_EQ'(i187:0, o500[Kernel95.next]o499:0, o500[Kernel95.next]o497:0) :|: o541[Kernel95.next]o497:0 < o500[Kernel95.next]o499:0 && o500[Kernel95.next]o499:0 > -1 && o541[Kernel95.next]o497:0 < o500[Kernel95.next]o497:0 && o500[Kernel95.next]o497:0 > -1 && i187:0 - 2 * div = 1 && i187:0 >= div1 && o541[Kernel95.next]o497:0 > 0 12.16/4.15 f2176_0_slide95_EQ'(i187:0, o500[Kernel95.next]o499:0, o500[Kernel95.next]o497:0) -> f2176_0_slide95_EQ(div1, o541[Kernel95.next]o497:0, o541[Kernel95.next]o497:0) :|: o541[Kernel95.next]o497:0 < o500[Kernel95.next]o499:0 && o500[Kernel95.next]o499:0 > -1 && o541[Kernel95.next]o497:0 < o500[Kernel95.next]o497:0 && o500[Kernel95.next]o497:0 > -1 && i187:0 - 2 * div = 1 && o541[Kernel95.next]o497:0 > 0 && i187:0 >= div1 && i187:0 - 2 * div > -2 && i187:0 - 2 * div < 2 && i187:0 - 2 * div1 > -2 && i187:0 - 2 * div1 < 2 12.16/4.15 f2176_0_slide95_EQ(i187:0, o500[Kernel95.next]o499:0, o500[Kernel95.next]o497:0) -> f2176_0_slide95_EQ'(i187:0, o500[Kernel95.next]o499:0, o500[Kernel95.next]o497:0) :|: o541[Kernel95.next]o499:0 < o500[Kernel95.next]o499:0 && o500[Kernel95.next]o499:0 > -1 && o541[Kernel95.next]o497:0 < o500[Kernel95.next]o497:0 && o500[Kernel95.next]o497:0 > -1 && i187:0 - 2 * div = 0 && o541[Kernel95.next]o499:0 > -1 && o541[Kernel95.next]o540:0 > o541[Kernel95.next]o499:0 && i187:0 >= div1 && o541[Kernel95.next]o497:0 > 0 12.16/4.15 f2176_0_slide95_EQ'(i187:0, o500[Kernel95.next]o499:0, o500[Kernel95.next]o497:0) -> f2176_0_slide95_EQ(div1, o541[Kernel95.next]o540:0, o541[Kernel95.next]o497:0) :|: o541[Kernel95.next]o499:0 < o500[Kernel95.next]o499:0 && o500[Kernel95.next]o499:0 > -1 && o541[Kernel95.next]o497:0 < o500[Kernel95.next]o497:0 && o500[Kernel95.next]o497:0 > -1 && i187:0 - 2 * div = 0 && o541[Kernel95.next]o499:0 > -1 && o541[Kernel95.next]o540:0 > o541[Kernel95.next]o499:0 && i187:0 >= div1 && o541[Kernel95.next]o497:0 > 0 && i187:0 - 2 * div > -2 && i187:0 - 2 * div < 2 && i187:0 - 2 * div1 > -2 && i187:0 - 2 * div1 < 2 12.16/4.15 12.16/4.15 ---------------------------------------- 12.16/4.15 12.16/4.15 (22) 12.16/4.15 Obligation: 12.16/4.15 Rules: 12.16/4.15 f2176_0_slide95_EQ(x, x1, x2) -> f2176_0_slide95_EQ'(x, x1, x2) :|: x3 < x1 && x1 > -1 && x4 < x2 && x2 > -1 && x - 2 * x5 = 1 && x >= x6 && x3 > 0 && x4 > -1 && x7 <= x4 && x7 > 0 12.16/4.15 f2176_0_slide95_EQ'(x8, x9, x10) -> f2176_0_slide95_EQ(x11, x12, x13) :|: x12 < x9 && x9 > -1 && x14 < x10 && x10 > -1 && x8 - 2 * x15 = 1 && x8 >= x11 && x12 > 0 && x14 > -1 && x13 <= x14 && x13 > 0 && x8 - 2 * x15 > -2 && x8 - 2 * x15 < 2 && x8 - 2 * x11 > -2 && x8 - 2 * x11 < 2 12.16/4.15 f2176_0_slide95_EQ(x16, x17, x18) -> f2176_0_slide95_EQ'(x16, x17, x18) :|: x19 < x17 && x17 > -1 && x19 < x18 && x18 > -1 && x16 - 2 * x20 = 1 && x16 >= x21 && x19 > 0 12.16/4.15 f2176_0_slide95_EQ'(x22, x23, x24) -> f2176_0_slide95_EQ(x25, x26, x26) :|: x26 < x23 && x23 > -1 && x26 < x24 && x24 > -1 && x22 - 2 * x27 = 1 && x26 > 0 && x22 >= x25 && x22 - 2 * x27 > -2 && x22 - 2 * x27 < 2 && x22 - 2 * x25 > -2 && x22 - 2 * x25 < 2 12.16/4.15 f2176_0_slide95_EQ(x28, x29, x30) -> f2176_0_slide95_EQ'(x28, x29, x30) :|: x31 < x29 && x29 > -1 && x32 < x30 && x30 > -1 && x28 - 2 * x33 = 0 && x31 > -1 && x34 > x31 && x28 >= x35 && x32 > 0 12.16/4.15 f2176_0_slide95_EQ'(x36, x37, x38) -> f2176_0_slide95_EQ(x39, x40, x41) :|: x42 < x37 && x37 > -1 && x41 < x38 && x38 > -1 && x36 - 2 * x43 = 0 && x42 > -1 && x40 > x42 && x36 >= x39 && x41 > 0 && x36 - 2 * x43 > -2 && x36 - 2 * x43 < 2 && x36 - 2 * x39 > -2 && x36 - 2 * x39 < 2 12.16/4.15 12.16/4.15 ---------------------------------------- 12.16/4.15 12.16/4.15 (23) IRSFormatTransformerProof (EQUIVALENT) 12.16/4.15 Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). 12.16/4.15 ---------------------------------------- 12.16/4.15 12.16/4.15 (24) 12.16/4.15 Obligation: 12.16/4.15 Rules: 12.16/4.15 f2176_0_slide95_EQ(x, x1, x2) -> f2176_0_slide95_EQ'(x, x1, x2) :|: x3 < x1 && x1 > -1 && x4 < x2 && x2 > -1 && x - 2 * x5 = 1 && x >= x6 && x3 > 0 && x4 > -1 && x7 <= x4 && x7 > 0 12.16/4.15 f2176_0_slide95_EQ'(x8, x9, x10) -> f2176_0_slide95_EQ(x11, x12, x13) :|: x12 < x9 && x9 > -1 && x14 < x10 && x10 > -1 && x8 - 2 * x15 = 1 && x8 >= x11 && x12 > 0 && x14 > -1 && x13 <= x14 && x13 > 0 && x8 - 2 * x15 > -2 && x8 - 2 * x15 < 2 && x8 - 2 * x11 > -2 && x8 - 2 * x11 < 2 12.16/4.15 f2176_0_slide95_EQ(x16, x17, x18) -> f2176_0_slide95_EQ'(x16, x17, x18) :|: x19 < x17 && x17 > -1 && x19 < x18 && x18 > -1 && x16 - 2 * x20 = 1 && x16 >= x21 && x19 > 0 12.16/4.15 f2176_0_slide95_EQ'(x22, x23, x24) -> f2176_0_slide95_EQ(x25, x26, x26) :|: x26 < x23 && x23 > -1 && x26 < x24 && x24 > -1 && x22 - 2 * x27 = 1 && x26 > 0 && x22 >= x25 && x22 - 2 * x27 > -2 && x22 - 2 * x27 < 2 && x22 - 2 * x25 > -2 && x22 - 2 * x25 < 2 12.16/4.15 f2176_0_slide95_EQ(x28, x29, x30) -> f2176_0_slide95_EQ'(x28, x29, x30) :|: x31 < x29 && x29 > -1 && x32 < x30 && x30 > -1 && x28 - 2 * x33 = 0 && x31 > -1 && x34 > x31 && x28 >= x35 && x32 > 0 12.16/4.15 f2176_0_slide95_EQ'(x36, x37, x38) -> f2176_0_slide95_EQ(x39, x40, x41) :|: x42 < x37 && x37 > -1 && x41 < x38 && x38 > -1 && x36 - 2 * x43 = 0 && x42 > -1 && x40 > x42 && x36 >= x39 && x41 > 0 && x36 - 2 * x43 > -2 && x36 - 2 * x43 < 2 && x36 - 2 * x39 > -2 && x36 - 2 * x39 < 2 12.16/4.15 12.16/4.15 ---------------------------------------- 12.16/4.15 12.16/4.15 (25) IRSwTTerminationDigraphProof (EQUIVALENT) 12.16/4.15 Constructed termination digraph! 12.16/4.15 Nodes: 12.16/4.15 (1) f2176_0_slide95_EQ(x, x1, x2) -> f2176_0_slide95_EQ'(x, x1, x2) :|: x3 < x1 && x1 > -1 && x4 < x2 && x2 > -1 && x - 2 * x5 = 1 && x >= x6 && x3 > 0 && x4 > -1 && x7 <= x4 && x7 > 0 12.16/4.15 (2) f2176_0_slide95_EQ'(x8, x9, x10) -> f2176_0_slide95_EQ(x11, x12, x13) :|: x12 < x9 && x9 > -1 && x14 < x10 && x10 > -1 && x8 - 2 * x15 = 1 && x8 >= x11 && x12 > 0 && x14 > -1 && x13 <= x14 && x13 > 0 && x8 - 2 * x15 > -2 && x8 - 2 * x15 < 2 && x8 - 2 * x11 > -2 && x8 - 2 * x11 < 2 12.16/4.15 (3) f2176_0_slide95_EQ(x16, x17, x18) -> f2176_0_slide95_EQ'(x16, x17, x18) :|: x19 < x17 && x17 > -1 && x19 < x18 && x18 > -1 && x16 - 2 * x20 = 1 && x16 >= x21 && x19 > 0 12.16/4.15 (4) f2176_0_slide95_EQ'(x22, x23, x24) -> f2176_0_slide95_EQ(x25, x26, x26) :|: x26 < x23 && x23 > -1 && x26 < x24 && x24 > -1 && x22 - 2 * x27 = 1 && x26 > 0 && x22 >= x25 && x22 - 2 * x27 > -2 && x22 - 2 * x27 < 2 && x22 - 2 * x25 > -2 && x22 - 2 * x25 < 2 12.16/4.15 (5) f2176_0_slide95_EQ(x28, x29, x30) -> f2176_0_slide95_EQ'(x28, x29, x30) :|: x31 < x29 && x29 > -1 && x32 < x30 && x30 > -1 && x28 - 2 * x33 = 0 && x31 > -1 && x34 > x31 && x28 >= x35 && x32 > 0 12.16/4.15 (6) f2176_0_slide95_EQ'(x36, x37, x38) -> f2176_0_slide95_EQ(x39, x40, x41) :|: x42 < x37 && x37 > -1 && x41 < x38 && x38 > -1 && x36 - 2 * x43 = 0 && x42 > -1 && x40 > x42 && x36 >= x39 && x41 > 0 && x36 - 2 * x43 > -2 && x36 - 2 * x43 < 2 && x36 - 2 * x39 > -2 && x36 - 2 * x39 < 2 12.16/4.15 12.16/4.15 Arcs: 12.16/4.15 (1) -> (2), (4) 12.16/4.15 (2) -> (1), (3), (5) 12.16/4.15 (3) -> (2), (4) 12.16/4.15 (4) -> (1), (3), (5) 12.16/4.15 (5) -> (6) 12.16/4.15 (6) -> (1), (3), (5) 12.16/4.15 12.16/4.15 This digraph is fully evaluated! 12.16/4.15 ---------------------------------------- 12.16/4.15 12.16/4.15 (26) 12.16/4.15 Obligation: 12.16/4.15 12.16/4.15 Termination digraph: 12.16/4.15 Nodes: 12.16/4.15 (1) f2176_0_slide95_EQ(x, x1, x2) -> f2176_0_slide95_EQ'(x, x1, x2) :|: x3 < x1 && x1 > -1 && x4 < x2 && x2 > -1 && x - 2 * x5 = 1 && x >= x6 && x3 > 0 && x4 > -1 && x7 <= x4 && x7 > 0 12.16/4.15 (2) f2176_0_slide95_EQ'(x8, x9, x10) -> f2176_0_slide95_EQ(x11, x12, x13) :|: x12 < x9 && x9 > -1 && x14 < x10 && x10 > -1 && x8 - 2 * x15 = 1 && x8 >= x11 && x12 > 0 && x14 > -1 && x13 <= x14 && x13 > 0 && x8 - 2 * x15 > -2 && x8 - 2 * x15 < 2 && x8 - 2 * x11 > -2 && x8 - 2 * x11 < 2 12.16/4.15 (3) f2176_0_slide95_EQ(x16, x17, x18) -> f2176_0_slide95_EQ'(x16, x17, x18) :|: x19 < x17 && x17 > -1 && x19 < x18 && x18 > -1 && x16 - 2 * x20 = 1 && x16 >= x21 && x19 > 0 12.16/4.15 (4) f2176_0_slide95_EQ'(x36, x37, x38) -> f2176_0_slide95_EQ(x39, x40, x41) :|: x42 < x37 && x37 > -1 && x41 < x38 && x38 > -1 && x36 - 2 * x43 = 0 && x42 > -1 && x40 > x42 && x36 >= x39 && x41 > 0 && x36 - 2 * x43 > -2 && x36 - 2 * x43 < 2 && x36 - 2 * x39 > -2 && x36 - 2 * x39 < 2 12.16/4.15 (5) f2176_0_slide95_EQ(x28, x29, x30) -> f2176_0_slide95_EQ'(x28, x29, x30) :|: x31 < x29 && x29 > -1 && x32 < x30 && x30 > -1 && x28 - 2 * x33 = 0 && x31 > -1 && x34 > x31 && x28 >= x35 && x32 > 0 12.16/4.15 (6) f2176_0_slide95_EQ'(x22, x23, x24) -> f2176_0_slide95_EQ(x25, x26, x26) :|: x26 < x23 && x23 > -1 && x26 < x24 && x24 > -1 && x22 - 2 * x27 = 1 && x26 > 0 && x22 >= x25 && x22 - 2 * x27 > -2 && x22 - 2 * x27 < 2 && x22 - 2 * x25 > -2 && x22 - 2 * x25 < 2 12.16/4.15 12.16/4.15 Arcs: 12.16/4.15 (1) -> (2), (6) 12.16/4.15 (2) -> (1), (3), (5) 12.16/4.15 (3) -> (2), (6) 12.16/4.15 (4) -> (1), (3), (5) 12.16/4.15 (5) -> (4) 12.16/4.15 (6) -> (1), (3), (5) 12.16/4.15 12.16/4.15 This digraph is fully evaluated! 12.16/4.15 12.16/4.15 ---------------------------------------- 12.16/4.15 12.16/4.15 (27) IntTRSCompressionProof (EQUIVALENT) 12.16/4.15 Compressed rules. 12.16/4.15 ---------------------------------------- 12.16/4.15 12.16/4.15 (28) 12.16/4.15 Obligation: 12.16/4.15 Rules: 12.16/4.15 f2176_0_slide95_EQ'(x36:0, x37:0, x38:0) -> f2176_0_slide95_EQ(x39:0, x40:0, x41:0) :|: x36:0 - 2 * x39:0 > -2 && x36:0 - 2 * x39:0 < 2 && x36:0 - 2 * x43:0 < 2 && x36:0 - 2 * x43:0 > -2 && x41:0 > 0 && x39:0 <= x36:0 && x42:0 < x40:0 && x42:0 > -1 && x36:0 - 2 * x43:0 = 0 && x38:0 > -1 && x41:0 < x38:0 && x37:0 > -1 && x42:0 < x37:0 12.16/4.15 f2176_0_slide95_EQ(x28:0, x29:0, x30:0) -> f2176_0_slide95_EQ'(x28:0, x29:0, x30:0) :|: x35:0 <= x28:0 && x32:0 > 0 && x34:0 > x31:0 && x31:0 > -1 && x28:0 - 2 * x33:0 = 0 && x30:0 > -1 && x32:0 < x30:0 && x29:0 > -1 && x31:0 < x29:0 12.16/4.15 f2176_0_slide95_EQ(x16:0, x17:0, x18:0) -> f2176_0_slide95_EQ'(x16:0, x17:0, x18:0) :|: x21:0 <= x16:0 && x19:0 > 0 && x16:0 - 2 * x20:0 = 1 && x18:0 > -1 && x19:0 < x18:0 && x17:0 > -1 && x19:0 < x17:0 12.16/4.15 f2176_0_slide95_EQ'(x22:0, x23:0, x24:0) -> f2176_0_slide95_EQ(x25:0, x26:0, x26:0) :|: x22:0 - 2 * x25:0 > -2 && x22:0 - 2 * x25:0 < 2 && x22:0 - 2 * x27:0 < 2 && x22:0 - 2 * x27:0 > -2 && x25:0 <= x22:0 && x26:0 > 0 && x22:0 - 2 * x27:0 = 1 && x24:0 > -1 && x26:0 < x24:0 && x23:0 > -1 && x26:0 < x23:0 12.16/4.15 f2176_0_slide95_EQ'(x8:0, x9:0, x10:0) -> f2176_0_slide95_EQ(x11:0, x12:0, x13:0) :|: x8:0 - 2 * x11:0 > -2 && x8:0 - 2 * x11:0 < 2 && x8:0 - 2 * x15:0 < 2 && x8:0 - 2 * x15:0 > -2 && x13:0 > 0 && x14:0 >= x13:0 && x14:0 > -1 && x12:0 > 0 && x8:0 >= x11:0 && x8:0 - 2 * x15:0 = 1 && x10:0 > -1 && x14:0 < x10:0 && x9:0 > -1 && x9:0 > x12:0 12.16/4.15 f2176_0_slide95_EQ(x:0, x1:0, x2:0) -> f2176_0_slide95_EQ'(x:0, x1:0, x2:0) :|: x7:0 <= x4:0 && x7:0 > 0 && x4:0 > -1 && x3:0 > 0 && x:0 >= x6:0 && x:0 - 2 * x5:0 = 1 && x2:0 > -1 && x4:0 < x2:0 && x1:0 > -1 && x3:0 < x1:0 12.16/4.15 12.16/4.15 ---------------------------------------- 12.16/4.15 12.16/4.15 (29) FilterProof (EQUIVALENT) 12.16/4.15 Used the following sort dictionary for filtering: 12.16/4.15 f2176_0_slide95_EQ'(INTEGER, INTEGER, INTEGER) 12.16/4.15 f2176_0_slide95_EQ(INTEGER, INTEGER, INTEGER) 12.16/4.15 Replaced non-predefined constructor symbols by 0. 12.16/4.15 ---------------------------------------- 12.16/4.15 12.16/4.15 (30) 12.16/4.15 Obligation: 12.16/4.15 Rules: 12.16/4.15 f2176_0_slide95_EQ'(x36:0, x37:0, x38:0) -> f2176_0_slide95_EQ(x39:0, x40:0, x41:0) :|: x36:0 - 2 * x39:0 > -2 && x36:0 - 2 * x39:0 < 2 && x36:0 - 2 * x43:0 < 2 && x36:0 - 2 * x43:0 > -2 && x41:0 > 0 && x39:0 <= x36:0 && x42:0 < x40:0 && x42:0 > -1 && x36:0 - 2 * x43:0 = 0 && x38:0 > -1 && x41:0 < x38:0 && x37:0 > -1 && x42:0 < x37:0 12.16/4.15 f2176_0_slide95_EQ(x28:0, x29:0, x30:0) -> f2176_0_slide95_EQ'(x28:0, x29:0, x30:0) :|: x35:0 <= x28:0 && x32:0 > 0 && x34:0 > x31:0 && x31:0 > -1 && x28:0 - 2 * x33:0 = 0 && x30:0 > -1 && x32:0 < x30:0 && x29:0 > -1 && x31:0 < x29:0 12.16/4.15 f2176_0_slide95_EQ(x16:0, x17:0, x18:0) -> f2176_0_slide95_EQ'(x16:0, x17:0, x18:0) :|: x21:0 <= x16:0 && x19:0 > 0 && x16:0 - 2 * x20:0 = 1 && x18:0 > -1 && x19:0 < x18:0 && x17:0 > -1 && x19:0 < x17:0 12.16/4.15 f2176_0_slide95_EQ'(x22:0, x23:0, x24:0) -> f2176_0_slide95_EQ(x25:0, x26:0, x26:0) :|: x22:0 - 2 * x25:0 > -2 && x22:0 - 2 * x25:0 < 2 && x22:0 - 2 * x27:0 < 2 && x22:0 - 2 * x27:0 > -2 && x25:0 <= x22:0 && x26:0 > 0 && x22:0 - 2 * x27:0 = 1 && x24:0 > -1 && x26:0 < x24:0 && x23:0 > -1 && x26:0 < x23:0 12.16/4.15 f2176_0_slide95_EQ'(x8:0, x9:0, x10:0) -> f2176_0_slide95_EQ(x11:0, x12:0, x13:0) :|: x8:0 - 2 * x11:0 > -2 && x8:0 - 2 * x11:0 < 2 && x8:0 - 2 * x15:0 < 2 && x8:0 - 2 * x15:0 > -2 && x13:0 > 0 && x14:0 >= x13:0 && x14:0 > -1 && x12:0 > 0 && x8:0 >= x11:0 && x8:0 - 2 * x15:0 = 1 && x10:0 > -1 && x14:0 < x10:0 && x9:0 > -1 && x9:0 > x12:0 12.16/4.15 f2176_0_slide95_EQ(x:0, x1:0, x2:0) -> f2176_0_slide95_EQ'(x:0, x1:0, x2:0) :|: x7:0 <= x4:0 && x7:0 > 0 && x4:0 > -1 && x3:0 > 0 && x:0 >= x6:0 && x:0 - 2 * x5:0 = 1 && x2:0 > -1 && x4:0 < x2:0 && x1:0 > -1 && x3:0 < x1:0 12.16/4.15 12.16/4.15 ---------------------------------------- 12.16/4.15 12.16/4.15 (31) IntTRSCompressionProof (EQUIVALENT) 12.16/4.15 Compressed rules. 12.16/4.15 ---------------------------------------- 12.16/4.15 12.16/4.15 (32) 12.16/4.15 Obligation: 12.16/4.15 Rules: 12.16/4.15 f2176_0_slide95_EQ(x16:0:0, x17:0:0, x18:0:0) -> f2176_0_slide95_EQ'(x16:0:0, x17:0:0, x18:0:0) :|: x17:0:0 > -1 && x19:0:0 < x17:0:0 && x19:0:0 < x18:0:0 && x18:0:0 > -1 && x16:0:0 - 2 * x20:0:0 = 1 && x19:0:0 > 0 && x21:0:0 <= x16:0:0 12.16/4.15 f2176_0_slide95_EQ'(x22:0:0, x23:0:0, x24:0:0) -> f2176_0_slide95_EQ(x25:0:0, x26:0:0, x26:0:0) :|: x23:0:0 > -1 && x26:0:0 < x23:0:0 && x26:0:0 < x24:0:0 && x24:0:0 > -1 && x22:0:0 - 2 * x27:0:0 = 1 && x26:0:0 > 0 && x25:0:0 <= x22:0:0 && x22:0:0 - 2 * x27:0:0 > -2 && x22:0:0 - 2 * x27:0:0 < 2 && x22:0:0 - 2 * x25:0:0 < 2 && x22:0:0 - 2 * x25:0:0 > -2 12.16/4.15 f2176_0_slide95_EQ(x:0:0, x1:0:0, x2:0:0) -> f2176_0_slide95_EQ'(x:0:0, x1:0:0, x2:0:0) :|: x1:0:0 > -1 && x3:0:0 < x1:0:0 && x4:0:0 < x2:0:0 && x2:0:0 > -1 && x:0:0 - 2 * x5:0:0 = 1 && x:0:0 >= x6:0:0 && x3:0:0 > 0 && x4:0:0 > -1 && x7:0:0 > 0 && x7:0:0 <= x4:0:0 12.16/4.15 f2176_0_slide95_EQ'(x8:0:0, x9:0:0, x10:0:0) -> f2176_0_slide95_EQ(x11:0:0, x12:0:0, x13:0:0) :|: x9:0:0 > -1 && x9:0:0 > x12:0:0 && x14:0:0 < x10:0:0 && x10:0:0 > -1 && x8:0:0 - 2 * x15:0:0 = 1 && x8:0:0 >= x11:0:0 && x12:0:0 > 0 && x14:0:0 > -1 && x14:0:0 >= x13:0:0 && x13:0:0 > 0 && x8:0:0 - 2 * x15:0:0 > -2 && x8:0:0 - 2 * x15:0:0 < 2 && x8:0:0 - 2 * x11:0:0 < 2 && x8:0:0 - 2 * x11:0:0 > -2 12.16/4.15 f2176_0_slide95_EQ'(x36:0:0, x37:0:0, x38:0:0) -> f2176_0_slide95_EQ(x39:0:0, x40:0:0, x41:0:0) :|: x37:0:0 > -1 && x42:0:0 < x37:0:0 && x41:0:0 < x38:0:0 && x38:0:0 > -1 && x36:0:0 - 2 * x43:0:0 = 0 && x42:0:0 > -1 && x42:0:0 < x40:0:0 && x39:0:0 <= x36:0:0 && x41:0:0 > 0 && x36:0:0 - 2 * x43:0:0 > -2 && x36:0:0 - 2 * x43:0:0 < 2 && x36:0:0 - 2 * x39:0:0 < 2 && x36:0:0 - 2 * x39:0:0 > -2 12.16/4.15 f2176_0_slide95_EQ(x28:0:0, x29:0:0, x30:0:0) -> f2176_0_slide95_EQ'(x28:0:0, x29:0:0, x30:0:0) :|: x29:0:0 > -1 && x31:0:0 < x29:0:0 && x32:0:0 < x30:0:0 && x30:0:0 > -1 && x28:0:0 - 2 * x33:0:0 = 0 && x31:0:0 > -1 && x34:0:0 > x31:0:0 && x32:0:0 > 0 && x35:0:0 <= x28:0:0 12.16/4.15 12.16/4.15 ---------------------------------------- 12.16/4.15 12.16/4.15 (33) RankingReductionPairProof (EQUIVALENT) 12.16/4.15 Interpretation: 12.16/4.15 [ f2176_0_slide95_EQ ] = 2*f2176_0_slide95_EQ_3 + 1 12.16/4.15 [ f2176_0_slide95_EQ' ] = 2*f2176_0_slide95_EQ'_3 12.16/4.15 12.16/4.15 The following rules are decreasing: 12.16/4.15 f2176_0_slide95_EQ(x16:0:0, x17:0:0, x18:0:0) -> f2176_0_slide95_EQ'(x16:0:0, x17:0:0, x18:0:0) :|: x17:0:0 > -1 && x19:0:0 < x17:0:0 && x19:0:0 < x18:0:0 && x18:0:0 > -1 && x16:0:0 - 2 * x20:0:0 = 1 && x19:0:0 > 0 && x21:0:0 <= x16:0:0 12.16/4.15 f2176_0_slide95_EQ'(x22:0:0, x23:0:0, x24:0:0) -> f2176_0_slide95_EQ(x25:0:0, x26:0:0, x26:0:0) :|: x23:0:0 > -1 && x26:0:0 < x23:0:0 && x26:0:0 < x24:0:0 && x24:0:0 > -1 && x22:0:0 - 2 * x27:0:0 = 1 && x26:0:0 > 0 && x25:0:0 <= x22:0:0 && x22:0:0 - 2 * x27:0:0 > -2 && x22:0:0 - 2 * x27:0:0 < 2 && x22:0:0 - 2 * x25:0:0 < 2 && x22:0:0 - 2 * x25:0:0 > -2 12.16/4.15 f2176_0_slide95_EQ(x:0:0, x1:0:0, x2:0:0) -> f2176_0_slide95_EQ'(x:0:0, x1:0:0, x2:0:0) :|: x1:0:0 > -1 && x3:0:0 < x1:0:0 && x4:0:0 < x2:0:0 && x2:0:0 > -1 && x:0:0 - 2 * x5:0:0 = 1 && x:0:0 >= x6:0:0 && x3:0:0 > 0 && x4:0:0 > -1 && x7:0:0 > 0 && x7:0:0 <= x4:0:0 12.16/4.15 f2176_0_slide95_EQ'(x8:0:0, x9:0:0, x10:0:0) -> f2176_0_slide95_EQ(x11:0:0, x12:0:0, x13:0:0) :|: x9:0:0 > -1 && x9:0:0 > x12:0:0 && x14:0:0 < x10:0:0 && x10:0:0 > -1 && x8:0:0 - 2 * x15:0:0 = 1 && x8:0:0 >= x11:0:0 && x12:0:0 > 0 && x14:0:0 > -1 && x14:0:0 >= x13:0:0 && x13:0:0 > 0 && x8:0:0 - 2 * x15:0:0 > -2 && x8:0:0 - 2 * x15:0:0 < 2 && x8:0:0 - 2 * x11:0:0 < 2 && x8:0:0 - 2 * x11:0:0 > -2 12.16/4.15 f2176_0_slide95_EQ'(x36:0:0, x37:0:0, x38:0:0) -> f2176_0_slide95_EQ(x39:0:0, x40:0:0, x41:0:0) :|: x37:0:0 > -1 && x42:0:0 < x37:0:0 && x41:0:0 < x38:0:0 && x38:0:0 > -1 && x36:0:0 - 2 * x43:0:0 = 0 && x42:0:0 > -1 && x42:0:0 < x40:0:0 && x39:0:0 <= x36:0:0 && x41:0:0 > 0 && x36:0:0 - 2 * x43:0:0 > -2 && x36:0:0 - 2 * x43:0:0 < 2 && x36:0:0 - 2 * x39:0:0 < 2 && x36:0:0 - 2 * x39:0:0 > -2 12.16/4.15 f2176_0_slide95_EQ(x28:0:0, x29:0:0, x30:0:0) -> f2176_0_slide95_EQ'(x28:0:0, x29:0:0, x30:0:0) :|: x29:0:0 > -1 && x31:0:0 < x29:0:0 && x32:0:0 < x30:0:0 && x30:0:0 > -1 && x28:0:0 - 2 * x33:0:0 = 0 && x31:0:0 > -1 && x34:0:0 > x31:0:0 && x32:0:0 > 0 && x35:0:0 <= x28:0:0 12.16/4.15 12.16/4.15 The following rules are bounded: 12.16/4.15 f2176_0_slide95_EQ(x16:0:0, x17:0:0, x18:0:0) -> f2176_0_slide95_EQ'(x16:0:0, x17:0:0, x18:0:0) :|: x17:0:0 > -1 && x19:0:0 < x17:0:0 && x19:0:0 < x18:0:0 && x18:0:0 > -1 && x16:0:0 - 2 * x20:0:0 = 1 && x19:0:0 > 0 && x21:0:0 <= x16:0:0 12.16/4.15 f2176_0_slide95_EQ'(x22:0:0, x23:0:0, x24:0:0) -> f2176_0_slide95_EQ(x25:0:0, x26:0:0, x26:0:0) :|: x23:0:0 > -1 && x26:0:0 < x23:0:0 && x26:0:0 < x24:0:0 && x24:0:0 > -1 && x22:0:0 - 2 * x27:0:0 = 1 && x26:0:0 > 0 && x25:0:0 <= x22:0:0 && x22:0:0 - 2 * x27:0:0 > -2 && x22:0:0 - 2 * x27:0:0 < 2 && x22:0:0 - 2 * x25:0:0 < 2 && x22:0:0 - 2 * x25:0:0 > -2 12.16/4.15 f2176_0_slide95_EQ(x:0:0, x1:0:0, x2:0:0) -> f2176_0_slide95_EQ'(x:0:0, x1:0:0, x2:0:0) :|: x1:0:0 > -1 && x3:0:0 < x1:0:0 && x4:0:0 < x2:0:0 && x2:0:0 > -1 && x:0:0 - 2 * x5:0:0 = 1 && x:0:0 >= x6:0:0 && x3:0:0 > 0 && x4:0:0 > -1 && x7:0:0 > 0 && x7:0:0 <= x4:0:0 12.16/4.15 f2176_0_slide95_EQ'(x8:0:0, x9:0:0, x10:0:0) -> f2176_0_slide95_EQ(x11:0:0, x12:0:0, x13:0:0) :|: x9:0:0 > -1 && x9:0:0 > x12:0:0 && x14:0:0 < x10:0:0 && x10:0:0 > -1 && x8:0:0 - 2 * x15:0:0 = 1 && x8:0:0 >= x11:0:0 && x12:0:0 > 0 && x14:0:0 > -1 && x14:0:0 >= x13:0:0 && x13:0:0 > 0 && x8:0:0 - 2 * x15:0:0 > -2 && x8:0:0 - 2 * x15:0:0 < 2 && x8:0:0 - 2 * x11:0:0 < 2 && x8:0:0 - 2 * x11:0:0 > -2 12.16/4.15 f2176_0_slide95_EQ'(x36:0:0, x37:0:0, x38:0:0) -> f2176_0_slide95_EQ(x39:0:0, x40:0:0, x41:0:0) :|: x37:0:0 > -1 && x42:0:0 < x37:0:0 && x41:0:0 < x38:0:0 && x38:0:0 > -1 && x36:0:0 - 2 * x43:0:0 = 0 && x42:0:0 > -1 && x42:0:0 < x40:0:0 && x39:0:0 <= x36:0:0 && x41:0:0 > 0 && x36:0:0 - 2 * x43:0:0 > -2 && x36:0:0 - 2 * x43:0:0 < 2 && x36:0:0 - 2 * x39:0:0 < 2 && x36:0:0 - 2 * x39:0:0 > -2 12.16/4.15 f2176_0_slide95_EQ(x28:0:0, x29:0:0, x30:0:0) -> f2176_0_slide95_EQ'(x28:0:0, x29:0:0, x30:0:0) :|: x29:0:0 > -1 && x31:0:0 < x29:0:0 && x32:0:0 < x30:0:0 && x30:0:0 > -1 && x28:0:0 - 2 * x33:0:0 = 0 && x31:0:0 > -1 && x34:0:0 > x31:0:0 && x32:0:0 > 0 && x35:0:0 <= x28:0:0 12.16/4.15 12.16/4.15 12.16/4.15 ---------------------------------------- 12.16/4.15 12.16/4.15 (34) 12.16/4.15 YES 12.16/4.19 EOF