/export/starexec/sandbox2/solver/bin/starexec_run_standard /export/starexec/sandbox2/benchmark/theBenchmark.jar /export/starexec/sandbox2/output/output_files -------------------------------------------------------------------------------- MAYBE proof of /export/starexec/sandbox2/benchmark/theBenchmark.jar # AProVE Commit ID: 794c25de1cacf0d048858bcd21c9a779e1221865 marcel 20200619 unpublished dirty termination of the given Bare JBC problem could not be shown: (0) Bare JBC problem (1) BareJBCToJBCProof [EQUIVALENT, 96 ms] (2) JBC problem (3) JBCToGraph [EQUIVALENT, 859 ms] (4) JBCTerminationGraph (5) TerminationGraphToSCCProof [SOUND, 0 ms] (6) AND (7) JBCTerminationSCC (8) SCCToIRSProof [SOUND, 70 ms] (9) IRSwT (10) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (11) IRSwT (12) IRSwTTerminationDigraphProof [EQUIVALENT, 0 ms] (13) IRSwT (14) IntTRSCompressionProof [EQUIVALENT, 1 ms] (15) IRSwT (16) TempFilterProof [SOUND, 21 ms] (17) IntTRS (18) RankingReductionPairProof [EQUIVALENT, 0 ms] (19) YES (20) JBCTerminationSCC (21) SCCToIRSProof [SOUND, 61 ms] (22) IRSwT (23) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (24) IRSwT (25) IRSwTTerminationDigraphProof [EQUIVALENT, 47 ms] (26) IRSwT (27) IntTRSCompressionProof [EQUIVALENT, 0 ms] (28) IRSwT (29) FilterProof [EQUIVALENT, 0 ms] (30) IntTRS (31) IntTRSCompressionProof [EQUIVALENT, 0 ms] (32) IntTRS (33) IntTRSPeriodicNontermProof [COMPLETE, 1 ms] (34) NO (35) JBCTerminationSCC (36) SCCToIRSProof [SOUND, 38 ms] (37) IRSwT (38) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (39) IRSwT (40) IRSwTTerminationDigraphProof [EQUIVALENT, 95 ms] (41) IRSwT (42) IntTRSCompressionProof [EQUIVALENT, 0 ms] (43) IRSwT (44) FilterProof [EQUIVALENT, 0 ms] (45) IntTRS (46) IntTRSCompressionProof [EQUIVALENT, 0 ms] (47) IntTRS (48) IntTRSPeriodicNontermProof [COMPLETE, 9 ms] (49) NO ---------------------------------------- (0) Obligation: need to prove termination of the following program: /** * Parts of the below code have been adapted from * * http://www0.cs.ucl.ac.uk/staff/p.ohearn/Talks/SAStalk.pdf * * Based on the motivating example of the paper * * Automatic termination proofs for programs with shape-shifting heaps * Josh Berdine, Byron Cook, Dino Distefano, and Peter W. O’Hearn * In Proc. CAV'06, LNCS 4144, pp. 386 - 400, 2006. */ public class Kernel93 { /** * A reference to the next list element. */ private Kernel93 next; public static void main(String[] args) { int random1 = args[0].length(); int random2 = args[1].length(); //slide68(random1, random2); //slide88(random1, random2); slide93(random1, random2); //slide95(random1, random2); } /** * Create a new list element. * @param n a reference to the next element. */ public Kernel93(final Kernel93 n) { this.next = n; } /** * Create a new cyclical list of a length x. * @param x some length * @return cyclical list of length max(1, x) */ public static Kernel93 create(int x) { Kernel93 last, current; last = current = new Kernel93(null); while (--x > 0) current = new Kernel93(current); return last.next = current; } /** * Check if the last bit of x is > 0. */ private static boolean check(int x) { return x % 2 > 0; } public static void slide68(int random1, int random2) { Kernel93 h = create(random1); Kernel93 p = h; Kernel93 c = p.next; while (c != h) { Kernel93 o = c; c = c.next; if (check(random2)) { // nondet() p.next = c; //dispose(o); o = null; // Java's garbage collector will notice that the object // previously referenced by o is not referenced any more // and will release it (of course, in the next loop iteration // this would happen anyway); obviously, this does not have // quite the impact of a proper "dispose" operation, which // also renders all other pointer invalid that happen to point // to the same address } else { p = o; } // get a fresh random bit to the end of random2 random2 = random2 / 2; } } public static void slide88(int random1, int random2) { Kernel93 h = create(random1); Kernel93 p = h; Kernel93 c = p.next; while (c != h) { Kernel93 o = c; //c = c.next; if (check(random2)) { // nondet() Kernel93 e = o.next; p.next = e; //dispose(o); o = null; // Java's garbage collector will notice that the object // previously referenced by o is not referenced any more // and will release it c = o; // for a faithful translation of the original C code, // let c point to whatever o points to -- the interesting // aspect is that dereferencing this memory location // henceforth is a very bad idea (in C, obviously, this would // not necessarily lead to a clean exception at runtime) } else { p = o; } c = c.next; // get a fresh random bit to the end of random2 random2 = random2 / 2; } } /** * Non-terminating. */ public static void slide93(int random1, int random2) { Kernel93 h = create(random1); Kernel93 p = h; Kernel93 c = p.next; while (c != h) { Kernel93 o = c; //c = c.next; if (check(random2)) { // nondet() Kernel93 e = o.next; p.next = e; o.next = o; } else { p = o; } c = c.next; // get a fresh random bit to the end of random2 random2 = random2 / 2; } } public static void slide95(int random1, int random2) { Kernel93 h = create(random1); Kernel93 p = h; Kernel93 c = p.next; while (c != h) { Kernel93 o = c; c = c.next; if (check(random2)) { // nondet() Kernel93 e = o.next; p.next = e; o.next = o; } else { p = o; } // get a fresh random bit to the end of random2 random2 = random2 / 2; } } } ---------------------------------------- (1) BareJBCToJBCProof (EQUIVALENT) initialized classpath ---------------------------------------- (2) Obligation: need to prove termination of the following program: /** * Parts of the below code have been adapted from * * http://www0.cs.ucl.ac.uk/staff/p.ohearn/Talks/SAStalk.pdf * * Based on the motivating example of the paper * * Automatic termination proofs for programs with shape-shifting heaps * Josh Berdine, Byron Cook, Dino Distefano, and Peter W. O’Hearn * In Proc. CAV'06, LNCS 4144, pp. 386 - 400, 2006. */ public class Kernel93 { /** * A reference to the next list element. */ private Kernel93 next; public static void main(String[] args) { int random1 = args[0].length(); int random2 = args[1].length(); //slide68(random1, random2); //slide88(random1, random2); slide93(random1, random2); //slide95(random1, random2); } /** * Create a new list element. * @param n a reference to the next element. */ public Kernel93(final Kernel93 n) { this.next = n; } /** * Create a new cyclical list of a length x. * @param x some length * @return cyclical list of length max(1, x) */ public static Kernel93 create(int x) { Kernel93 last, current; last = current = new Kernel93(null); while (--x > 0) current = new Kernel93(current); return last.next = current; } /** * Check if the last bit of x is > 0. */ private static boolean check(int x) { return x % 2 > 0; } public static void slide68(int random1, int random2) { Kernel93 h = create(random1); Kernel93 p = h; Kernel93 c = p.next; while (c != h) { Kernel93 o = c; c = c.next; if (check(random2)) { // nondet() p.next = c; //dispose(o); o = null; // Java's garbage collector will notice that the object // previously referenced by o is not referenced any more // and will release it (of course, in the next loop iteration // this would happen anyway); obviously, this does not have // quite the impact of a proper "dispose" operation, which // also renders all other pointer invalid that happen to point // to the same address } else { p = o; } // get a fresh random bit to the end of random2 random2 = random2 / 2; } } public static void slide88(int random1, int random2) { Kernel93 h = create(random1); Kernel93 p = h; Kernel93 c = p.next; while (c != h) { Kernel93 o = c; //c = c.next; if (check(random2)) { // nondet() Kernel93 e = o.next; p.next = e; //dispose(o); o = null; // Java's garbage collector will notice that the object // previously referenced by o is not referenced any more // and will release it c = o; // for a faithful translation of the original C code, // let c point to whatever o points to -- the interesting // aspect is that dereferencing this memory location // henceforth is a very bad idea (in C, obviously, this would // not necessarily lead to a clean exception at runtime) } else { p = o; } c = c.next; // get a fresh random bit to the end of random2 random2 = random2 / 2; } } /** * Non-terminating. */ public static void slide93(int random1, int random2) { Kernel93 h = create(random1); Kernel93 p = h; Kernel93 c = p.next; while (c != h) { Kernel93 o = c; //c = c.next; if (check(random2)) { // nondet() Kernel93 e = o.next; p.next = e; o.next = o; } else { p = o; } c = c.next; // get a fresh random bit to the end of random2 random2 = random2 / 2; } } public static void slide95(int random1, int random2) { Kernel93 h = create(random1); Kernel93 p = h; Kernel93 c = p.next; while (c != h) { Kernel93 o = c; c = c.next; if (check(random2)) { // nondet() Kernel93 e = o.next; p.next = e; o.next = o; } else { p = o; } // get a fresh random bit to the end of random2 random2 = random2 / 2; } } } ---------------------------------------- (3) JBCToGraph (EQUIVALENT) Constructed TerminationGraph. ---------------------------------------- (4) Obligation: Termination Graph based on JBC Program: Kernel93.main([Ljava/lang/String;)V: Graph of 297 nodes with 2 SCCs. Kernel93.create(I)LKernel93;: Graph of 42 nodes with 1 SCC. ---------------------------------------- (5) TerminationGraphToSCCProof (SOUND) Splitted TerminationGraph to 3 SCCss. ---------------------------------------- (6) Complex Obligation (AND) ---------------------------------------- (7) Obligation: SCC of termination graph based on JBC Program. SCC contains nodes from the following methods: Kernel93.create(I)LKernel93; SCC calls the following helper methods: Performed SCC analyses: *Used field analysis yielded the following read fields: *Marker field analysis yielded the following relations that could be markers: ---------------------------------------- (8) SCCToIRSProof (SOUND) Transformed FIGraph SCCs to intTRSs. Log: Generated rules. Obtained 17 IRulesP rules: f952_0_create_Load(EOS(STATIC_952), i87, o74[Kernel93.next]o73) -> f957_0_create_LE(EOS(STATIC_957), i87, i87, o74[Kernel93.next]o73) :|: TRUE f957_0_create_LE(EOS(STATIC_957), i89, i89, o74[Kernel93.next]o73) -> f965_0_create_LE(EOS(STATIC_965), i89, i89, o74[Kernel93.next]o73) :|: TRUE f965_0_create_LE(EOS(STATIC_965), i89, i89, o74[Kernel93.next]o73) -> f973_0_create_New(EOS(STATIC_973), i89, o74[Kernel93.next]o73) :|: i89 > 0 f973_0_create_New(EOS(STATIC_973), i89, o74[Kernel93.next]o73) -> f980_0_create_Duplicate(EOS(STATIC_980), i89, o74[Kernel93.next]o73) :|: TRUE f980_0_create_Duplicate(EOS(STATIC_980), i89, o74[Kernel93.next]o73) -> f986_0_create_Load(EOS(STATIC_986), i89, o74[Kernel93.next]o73) :|: TRUE f986_0_create_Load(EOS(STATIC_986), i89, o74[Kernel93.next]o73) -> f988_0_create_InvokeMethod(EOS(STATIC_988), i89, o74[Kernel93.next]o73) :|: TRUE f988_0_create_InvokeMethod(EOS(STATIC_988), i89, o74[Kernel93.next]o73) -> f1000_0__init__Load(EOS(STATIC_1000), i89, o74[Kernel93.next]o73) :|: TRUE f1000_0__init__Load(EOS(STATIC_1000), i89, o74[Kernel93.next]o73) -> f1028_0__init__InvokeMethod(EOS(STATIC_1028), i89, o74[Kernel93.next]o73) :|: TRUE f1028_0__init__InvokeMethod(EOS(STATIC_1028), i89, o74[Kernel93.next]o73) -> f1058_0__init__Load(EOS(STATIC_1058), i89, o74[Kernel93.next]o73) :|: TRUE f1058_0__init__Load(EOS(STATIC_1058), i89, o74[Kernel93.next]o73) -> f1097_0__init__Load(EOS(STATIC_1097), i89, o74[Kernel93.next]o73) :|: TRUE f1097_0__init__Load(EOS(STATIC_1097), i89, o74[Kernel93.next]o73) -> f1102_0__init__FieldAccess(EOS(STATIC_1102), i89, o74[Kernel93.next]o73) :|: TRUE f1102_0__init__FieldAccess(EOS(STATIC_1102), i89, o74[Kernel93.next]o73) -> f1110_0__init__Return(EOS(STATIC_1110), i89, o74[Kernel93.next]o73) :|: TRUE f1110_0__init__Return(EOS(STATIC_1110), i89, o74[Kernel93.next]o73) -> f1116_0_create_Store(EOS(STATIC_1116), i89, o74[Kernel93.next]o73) :|: TRUE f1116_0_create_Store(EOS(STATIC_1116), i89, o74[Kernel93.next]o73) -> f1121_0_create_JMP(EOS(STATIC_1121), i89, o74[Kernel93.next]o73) :|: TRUE f1121_0_create_JMP(EOS(STATIC_1121), i89, o74[Kernel93.next]o73) -> f1169_0_create_Inc(EOS(STATIC_1169), i89, o74[Kernel93.next]o73) :|: TRUE f1169_0_create_Inc(EOS(STATIC_1169), i89, o74[Kernel93.next]o73) -> f944_0_create_Inc(EOS(STATIC_944), i89, o82[Kernel93.next]o73) :|: TRUE f944_0_create_Inc(EOS(STATIC_944), i54, o74[Kernel93.next]o73) -> f952_0_create_Load(EOS(STATIC_952), i54 + -1, o74[Kernel93.next]o73) :|: TRUE Combined rules. Obtained 1 IRulesP rules: f952_0_create_Load(EOS(STATIC_952), i87:0, o74[Kernel93.next]o73:0) -> f952_0_create_Load(EOS(STATIC_952), i87:0 - 1, o82[Kernel93.next]o73:0) :|: i87:0 > 0 Filtered constant ground arguments: f952_0_create_Load(x1, x2, x3) -> f952_0_create_Load(x2, x3) EOS(x1) -> EOS Filtered unneeded arguments: f952_0_create_Load(x1, x2) -> f952_0_create_Load(x1) Finished conversion. Obtained 1 rules.P rules: f952_0_create_Load(i87:0) -> f952_0_create_Load(i87:0 - 1) :|: i87:0 > 0 ---------------------------------------- (9) Obligation: Rules: f952_0_create_Load(i87:0) -> f952_0_create_Load(i87:0 - 1) :|: i87:0 > 0 ---------------------------------------- (10) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (11) Obligation: Rules: f952_0_create_Load(i87:0) -> f952_0_create_Load(arith) :|: i87:0 > 0 && arith = i87:0 - 1 ---------------------------------------- (12) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f952_0_create_Load(i87:0) -> f952_0_create_Load(arith) :|: i87:0 > 0 && arith = i87:0 - 1 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (13) Obligation: Termination digraph: Nodes: (1) f952_0_create_Load(i87:0) -> f952_0_create_Load(arith) :|: i87:0 > 0 && arith = i87:0 - 1 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (14) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (15) Obligation: Rules: f952_0_create_Load(i87:0:0) -> f952_0_create_Load(i87:0:0 - 1) :|: i87:0:0 > 0 ---------------------------------------- (16) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f952_0_create_Load(INTEGER) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (17) Obligation: Rules: f952_0_create_Load(i87:0:0) -> f952_0_create_Load(c) :|: c = i87:0:0 - 1 && i87:0:0 > 0 ---------------------------------------- (18) RankingReductionPairProof (EQUIVALENT) Interpretation: [ f952_0_create_Load ] = f952_0_create_Load_1 The following rules are decreasing: f952_0_create_Load(i87:0:0) -> f952_0_create_Load(c) :|: c = i87:0:0 - 1 && i87:0:0 > 0 The following rules are bounded: f952_0_create_Load(i87:0:0) -> f952_0_create_Load(c) :|: c = i87:0:0 - 1 && i87:0:0 > 0 ---------------------------------------- (19) YES ---------------------------------------- (20) Obligation: SCC of termination graph based on JBC Program. SCC contains nodes from the following methods: Kernel93.main([Ljava/lang/String;)V SCC calls the following helper methods: Performed SCC analyses: *Used field analysis yielded the following read fields: *Kernel93: [next] *Marker field analysis yielded the following relations that could be markers: ---------------------------------------- (21) SCCToIRSProof (SOUND) Transformed FIGraph SCCs to intTRSs. Log: Generated rules. Obtained 77 IRulesP rules: f5294_0_slide93_EQ(EOS(STATIC_5294), i547) -> f5299_0_slide93_Load(EOS(STATIC_5299), i547) :|: TRUE f5299_0_slide93_Load(EOS(STATIC_5299), i547) -> f5301_0_slide93_Store(EOS(STATIC_5301), i547) :|: TRUE f5301_0_slide93_Store(EOS(STATIC_5301), i547) -> f5302_0_slide93_Load(EOS(STATIC_5302), i547) :|: TRUE f5302_0_slide93_Load(EOS(STATIC_5302), i547) -> f5303_0_slide93_InvokeMethod(EOS(STATIC_5303), i547, i547) :|: TRUE f5303_0_slide93_InvokeMethod(EOS(STATIC_5303), i547, i547) -> f5304_0_check_Load(EOS(STATIC_5304), i547, i547) :|: TRUE f5304_0_check_Load(EOS(STATIC_5304), i547, i547) -> f5305_0_check_ConstantStackPush(EOS(STATIC_5305), i547, i547) :|: TRUE f5305_0_check_ConstantStackPush(EOS(STATIC_5305), i547, i547) -> f5306_0_check_IntArithmetic(EOS(STATIC_5306), i547, i547, 2) :|: TRUE f5306_0_check_IntArithmetic(EOS(STATIC_5306), i547, i547, matching1) -> f5307_0_check_LE(EOS(STATIC_5307), i547, i547 % 2) :|: TRUE && matching1 = 2 f5307_0_check_LE(EOS(STATIC_5307), i547, matching1) -> f5308_0_check_LE(EOS(STATIC_5308), i547, 0) :|: TRUE && matching1 = 0 f5307_0_check_LE(EOS(STATIC_5307), i547, matching1) -> f5309_0_check_LE(EOS(STATIC_5309), i547, 1) :|: TRUE && matching1 = 1 f5308_0_check_LE(EOS(STATIC_5308), i547, matching1) -> f5310_0_check_ConstantStackPush(EOS(STATIC_5310), i547) :|: 0 <= 0 && matching1 = 0 f5310_0_check_ConstantStackPush(EOS(STATIC_5310), i547) -> f5312_0_check_Return(EOS(STATIC_5312), i547, 0) :|: TRUE f5312_0_check_Return(EOS(STATIC_5312), i547, matching1) -> f5318_0_slide93_EQ(EOS(STATIC_5318), i547, 0) :|: TRUE && matching1 = 0 f5318_0_slide93_EQ(EOS(STATIC_5318), i547, matching1) -> f5322_0_slide93_Load(EOS(STATIC_5322), i547) :|: TRUE && matching1 = 0 f5322_0_slide93_Load(EOS(STATIC_5322), i547) -> f5324_0_slide93_Store(EOS(STATIC_5324), i547) :|: TRUE f5324_0_slide93_Store(EOS(STATIC_5324), i547) -> f5330_0_slide93_Load(EOS(STATIC_5330), i547) :|: TRUE f5330_0_slide93_Load(EOS(STATIC_5330), i547) -> f5333_0_slide93_FieldAccess(EOS(STATIC_5333), i547) :|: TRUE f5333_0_slide93_FieldAccess(EOS(STATIC_5333), i547) -> f5340_0_slide93_Store(EOS(STATIC_5340), i547) :|: TRUE f5340_0_slide93_Store(EOS(STATIC_5340), i547) -> f5347_0_slide93_Load(EOS(STATIC_5347), i547) :|: TRUE f5347_0_slide93_Load(EOS(STATIC_5347), i547) -> f5351_0_slide93_ConstantStackPush(EOS(STATIC_5351), i547) :|: TRUE f5351_0_slide93_ConstantStackPush(EOS(STATIC_5351), i547) -> f5368_0_slide93_IntArithmetic(EOS(STATIC_5368), i547, 2) :|: TRUE f5368_0_slide93_IntArithmetic(EOS(STATIC_5368), i547, matching1) -> f5378_0_slide93_Store(EOS(STATIC_5378), i631) :|: i631 = i547 / 2 && i631 <= i547 && matching1 = 2 f5378_0_slide93_Store(EOS(STATIC_5378), i631) -> f5454_0_slide93_JMP(EOS(STATIC_5454), i631) :|: TRUE f5454_0_slide93_JMP(EOS(STATIC_5454), i631) -> f5512_0_slide93_Load(EOS(STATIC_5512), i631) :|: TRUE f5512_0_slide93_Load(EOS(STATIC_5512), i631) -> f5222_0_slide93_Load(EOS(STATIC_5222), i631) :|: TRUE f5222_0_slide93_Load(EOS(STATIC_5222), i547) -> f5264_0_slide93_Load(EOS(STATIC_5264), i547) :|: TRUE f5264_0_slide93_Load(EOS(STATIC_5264), i547) -> f5281_0_slide93_EQ(EOS(STATIC_5281), i547) :|: TRUE f5281_0_slide93_EQ(EOS(STATIC_5281), i547) -> f5294_0_slide93_EQ(EOS(STATIC_5294), i547) :|: TRUE f5309_0_check_LE(EOS(STATIC_5309), i547, matching1) -> f5311_0_check_ConstantStackPush(EOS(STATIC_5311), i547) :|: 1 > 0 && matching1 = 1 f5311_0_check_ConstantStackPush(EOS(STATIC_5311), i547) -> f5314_0_check_JMP(EOS(STATIC_5314), i547, 1) :|: TRUE f5314_0_check_JMP(EOS(STATIC_5314), i547, matching1) -> f5321_0_check_Return(EOS(STATIC_5321), i547, 1) :|: TRUE && matching1 = 1 f5321_0_check_Return(EOS(STATIC_5321), i547, matching1) -> f5323_0_slide93_EQ(EOS(STATIC_5323), i547, 1) :|: TRUE && matching1 = 1 f5323_0_slide93_EQ(EOS(STATIC_5323), i547, matching1) -> f5325_0_slide93_Load(EOS(STATIC_5325), i547) :|: 1 > 0 && matching1 = 1 f5325_0_slide93_Load(EOS(STATIC_5325), i547) -> f5332_0_slide93_FieldAccess(EOS(STATIC_5332), i547) :|: TRUE f5332_0_slide93_FieldAccess(EOS(STATIC_5332), i547) -> f5334_0_slide93_Store(EOS(STATIC_5334), i547) :|: TRUE f5334_0_slide93_Store(EOS(STATIC_5334), i547) -> f5346_0_slide93_Load(EOS(STATIC_5346), i547) :|: TRUE f5346_0_slide93_Load(EOS(STATIC_5346), i547) -> f5348_0_slide93_Load(EOS(STATIC_5348), i547) :|: TRUE f5348_0_slide93_Load(EOS(STATIC_5348), i547) -> f5361_0_slide93_FieldAccess(EOS(STATIC_5361), i547) :|: TRUE f5361_0_slide93_FieldAccess(EOS(STATIC_5361), i547) -> f5371_0_slide93_FieldAccess(EOS(STATIC_5371), i547) :|: TRUE f5371_0_slide93_FieldAccess(EOS(STATIC_5371), i547) -> f5447_0_slide93_FieldAccess(EOS(STATIC_5447), i547) :|: TRUE f5371_0_slide93_FieldAccess(EOS(STATIC_5371), i547) -> f5448_0_slide93_FieldAccess(EOS(STATIC_5448), i547) :|: TRUE f5447_0_slide93_FieldAccess(EOS(STATIC_5447), i547) -> f5473_0_slide93_FieldAccess(EOS(STATIC_5473), i547) :|: TRUE f5447_0_slide93_FieldAccess(EOS(STATIC_5447), i547) -> f5475_0_slide93_FieldAccess(EOS(STATIC_5475), i547) :|: TRUE f5473_0_slide93_FieldAccess(EOS(STATIC_5473), i547) -> f5528_0_slide93_Load(EOS(STATIC_5528), i547) :|: TRUE f5528_0_slide93_Load(EOS(STATIC_5528), i547) -> f5634_0_slide93_Load(EOS(STATIC_5634), i547) :|: TRUE f5634_0_slide93_Load(EOS(STATIC_5634), i547) -> f5652_0_slide93_FieldAccess(EOS(STATIC_5652), i547) :|: TRUE f5652_0_slide93_FieldAccess(EOS(STATIC_5652), i547) -> f5667_0_slide93_JMP(EOS(STATIC_5667), i547) :|: TRUE f5667_0_slide93_JMP(EOS(STATIC_5667), i547) -> f5689_0_slide93_Load(EOS(STATIC_5689), i547) :|: TRUE f5689_0_slide93_Load(EOS(STATIC_5689), i547) -> f5800_0_slide93_FieldAccess(EOS(STATIC_5800), i547) :|: TRUE f5800_0_slide93_FieldAccess(EOS(STATIC_5800), i547) -> f5814_0_slide93_Store(EOS(STATIC_5814), i547) :|: TRUE f5814_0_slide93_Store(EOS(STATIC_5814), i547) -> f5828_0_slide93_Load(EOS(STATIC_5828), i547) :|: TRUE f5828_0_slide93_Load(EOS(STATIC_5828), i547) -> f5841_0_slide93_ConstantStackPush(EOS(STATIC_5841), i547) :|: TRUE f5841_0_slide93_ConstantStackPush(EOS(STATIC_5841), i547) -> f5855_0_slide93_IntArithmetic(EOS(STATIC_5855), i547, 2) :|: TRUE f5855_0_slide93_IntArithmetic(EOS(STATIC_5855), i547, matching1) -> f5870_0_slide93_Store(EOS(STATIC_5870), i717) :|: i717 = i547 / 2 && i717 <= i547 && matching1 = 2 f5870_0_slide93_Store(EOS(STATIC_5870), i717) -> f5921_0_slide93_JMP(EOS(STATIC_5921), i717) :|: TRUE f5921_0_slide93_JMP(EOS(STATIC_5921), i717) -> f6009_0_slide93_Load(EOS(STATIC_6009), i717) :|: TRUE f6009_0_slide93_Load(EOS(STATIC_6009), i717) -> f5222_0_slide93_Load(EOS(STATIC_5222), i717) :|: TRUE f5475_0_slide93_FieldAccess(EOS(STATIC_5475), i547) -> f5533_0_slide93_Load(EOS(STATIC_5533), i547) :|: TRUE f5533_0_slide93_Load(EOS(STATIC_5533), i547) -> f5642_0_slide93_Load(EOS(STATIC_5642), i547) :|: TRUE f5642_0_slide93_Load(EOS(STATIC_5642), i547) -> f5657_0_slide93_FieldAccess(EOS(STATIC_5657), i547) :|: TRUE f5657_0_slide93_FieldAccess(EOS(STATIC_5657), i547) -> f5675_0_slide93_JMP(EOS(STATIC_5675), i547) :|: TRUE f5675_0_slide93_JMP(EOS(STATIC_5675), i547) -> f5786_0_slide93_Load(EOS(STATIC_5786), i547) :|: TRUE f5786_0_slide93_Load(EOS(STATIC_5786), i547) -> f5330_0_slide93_Load(EOS(STATIC_5330), i547) :|: TRUE f5448_0_slide93_FieldAccess(EOS(STATIC_5448), i547) -> f5490_0_slide93_Load(EOS(STATIC_5490), i547) :|: TRUE f5490_0_slide93_Load(EOS(STATIC_5490), i547) -> f5627_0_slide93_Load(EOS(STATIC_5627), i547) :|: TRUE f5627_0_slide93_Load(EOS(STATIC_5627), i547) -> f5646_0_slide93_FieldAccess(EOS(STATIC_5646), i547) :|: TRUE f5646_0_slide93_FieldAccess(EOS(STATIC_5646), i547) -> f5661_0_slide93_JMP(EOS(STATIC_5661), i547) :|: TRUE f5661_0_slide93_JMP(EOS(STATIC_5661), i547) -> f5680_0_slide93_Load(EOS(STATIC_5680), i547) :|: TRUE f5680_0_slide93_Load(EOS(STATIC_5680), i547) -> f5791_0_slide93_FieldAccess(EOS(STATIC_5791), i547) :|: TRUE f5791_0_slide93_FieldAccess(EOS(STATIC_5791), i547) -> f5805_0_slide93_Store(EOS(STATIC_5805), i547) :|: TRUE f5805_0_slide93_Store(EOS(STATIC_5805), i547) -> f5819_0_slide93_Load(EOS(STATIC_5819), i547) :|: TRUE f5819_0_slide93_Load(EOS(STATIC_5819), i547) -> f5832_0_slide93_ConstantStackPush(EOS(STATIC_5832), i547) :|: TRUE f5832_0_slide93_ConstantStackPush(EOS(STATIC_5832), i547) -> f5845_0_slide93_IntArithmetic(EOS(STATIC_5845), i547, 2) :|: TRUE f5845_0_slide93_IntArithmetic(EOS(STATIC_5845), i547, matching1) -> f5860_0_slide93_Store(EOS(STATIC_5860), i716) :|: i716 = i547 / 2 && i716 <= i547 && matching1 = 2 f5860_0_slide93_Store(EOS(STATIC_5860), i716) -> f5874_0_slide93_JMP(EOS(STATIC_5874), i716) :|: TRUE f5874_0_slide93_JMP(EOS(STATIC_5874), i716) -> f5996_0_slide93_Load(EOS(STATIC_5996), i716) :|: TRUE f5996_0_slide93_Load(EOS(STATIC_5996), i716) -> f5222_0_slide93_Load(EOS(STATIC_5222), i716) :|: TRUE Combined rules. Obtained 4 IRulesP rules: f5294_0_slide93_EQ(EOS(STATIC_5294), i547:0) -> f5294_0_slide93_EQ'(EOS(STATIC_5294), i547:0) :|: i547:0 >= div1 && i547:0 - 2 * div = 1 f5294_0_slide93_EQ'(EOS(STATIC_5294), i547:0) -> f5294_0_slide93_EQ(EOS(STATIC_5294), div1) :|: i547:0 - 2 * div = 1 && i547:0 >= div1 && i547:0 - 2 * div > -2 && i547:0 - 2 * div < 2 && i547:0 - 2 * div1 < 2 && i547:0 - 2 * div1 > -2 f5294_0_slide93_EQ(EOS(STATIC_5294), i547:0) -> f5294_0_slide93_EQ'(EOS(STATIC_5294), i547:0) :|: i547:0 >= div1 && i547:0 - 2 * div = 0 f5294_0_slide93_EQ'(EOS(STATIC_5294), i547:0) -> f5294_0_slide93_EQ(EOS(STATIC_5294), div1) :|: i547:0 - 2 * div = 0 && i547:0 >= div1 && i547:0 - 2 * div > -2 && i547:0 - 2 * div < 2 && i547:0 - 2 * div1 < 2 && i547:0 - 2 * div1 > -2 Filtered constant ground arguments: f5294_0_slide93_EQ(x1, x2) -> f5294_0_slide93_EQ(x2) f5294_0_slide93_EQ'(x1, x2) -> f5294_0_slide93_EQ'(x2) EOS(x1) -> EOS Finished conversion. Obtained 4 rules.P rules: f5294_0_slide93_EQ(i547:0) -> f5294_0_slide93_EQ'(i547:0) :|: i547:0 >= div1 && i547:0 - 2 * div = 1 f5294_0_slide93_EQ'(i547:0) -> f5294_0_slide93_EQ(div1) :|: i547:0 >= div1 && i547:0 - 2 * div = 1 && i547:0 - 2 * div > -2 && i547:0 - 2 * div < 2 && i547:0 - 2 * div1 > -2 && i547:0 - 2 * div1 < 2 f5294_0_slide93_EQ(i547:0) -> f5294_0_slide93_EQ'(i547:0) :|: i547:0 >= div1 && i547:0 - 2 * div = 0 f5294_0_slide93_EQ'(i547:0) -> f5294_0_slide93_EQ(div1) :|: i547:0 >= div1 && i547:0 - 2 * div = 0 && i547:0 - 2 * div > -2 && i547:0 - 2 * div < 2 && i547:0 - 2 * div1 > -2 && i547:0 - 2 * div1 < 2 ---------------------------------------- (22) Obligation: Rules: f5294_0_slide93_EQ(x) -> f5294_0_slide93_EQ'(x) :|: x >= x1 && x - 2 * x2 = 1 f5294_0_slide93_EQ'(x3) -> f5294_0_slide93_EQ(x4) :|: x3 >= x4 && x3 - 2 * x5 = 1 && x3 - 2 * x5 > -2 && x3 - 2 * x5 < 2 && x3 - 2 * x4 > -2 && x3 - 2 * x4 < 2 f5294_0_slide93_EQ(x6) -> f5294_0_slide93_EQ'(x6) :|: x6 >= x7 && x6 - 2 * x8 = 0 f5294_0_slide93_EQ'(x9) -> f5294_0_slide93_EQ(x10) :|: x9 >= x10 && x9 - 2 * x11 = 0 && x9 - 2 * x11 > -2 && x9 - 2 * x11 < 2 && x9 - 2 * x10 > -2 && x9 - 2 * x10 < 2 ---------------------------------------- (23) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (24) Obligation: Rules: f5294_0_slide93_EQ(x) -> f5294_0_slide93_EQ'(x) :|: x >= x1 && x - 2 * x2 = 1 f5294_0_slide93_EQ'(x3) -> f5294_0_slide93_EQ(x4) :|: x3 >= x4 && x3 - 2 * x5 = 1 && x3 - 2 * x5 > -2 && x3 - 2 * x5 < 2 && x3 - 2 * x4 > -2 && x3 - 2 * x4 < 2 f5294_0_slide93_EQ(x6) -> f5294_0_slide93_EQ'(x6) :|: x6 >= x7 && x6 - 2 * x8 = 0 f5294_0_slide93_EQ'(x9) -> f5294_0_slide93_EQ(x10) :|: x9 >= x10 && x9 - 2 * x11 = 0 && x9 - 2 * x11 > -2 && x9 - 2 * x11 < 2 && x9 - 2 * x10 > -2 && x9 - 2 * x10 < 2 ---------------------------------------- (25) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f5294_0_slide93_EQ(x) -> f5294_0_slide93_EQ'(x) :|: x >= x1 && x - 2 * x2 = 1 (2) f5294_0_slide93_EQ'(x3) -> f5294_0_slide93_EQ(x4) :|: x3 >= x4 && x3 - 2 * x5 = 1 && x3 - 2 * x5 > -2 && x3 - 2 * x5 < 2 && x3 - 2 * x4 > -2 && x3 - 2 * x4 < 2 (3) f5294_0_slide93_EQ(x6) -> f5294_0_slide93_EQ'(x6) :|: x6 >= x7 && x6 - 2 * x8 = 0 (4) f5294_0_slide93_EQ'(x9) -> f5294_0_slide93_EQ(x10) :|: x9 >= x10 && x9 - 2 * x11 = 0 && x9 - 2 * x11 > -2 && x9 - 2 * x11 < 2 && x9 - 2 * x10 > -2 && x9 - 2 * x10 < 2 Arcs: (1) -> (2) (2) -> (1), (3) (3) -> (4) (4) -> (1), (3) This digraph is fully evaluated! ---------------------------------------- (26) Obligation: Termination digraph: Nodes: (1) f5294_0_slide93_EQ(x) -> f5294_0_slide93_EQ'(x) :|: x >= x1 && x - 2 * x2 = 1 (2) f5294_0_slide93_EQ'(x9) -> f5294_0_slide93_EQ(x10) :|: x9 >= x10 && x9 - 2 * x11 = 0 && x9 - 2 * x11 > -2 && x9 - 2 * x11 < 2 && x9 - 2 * x10 > -2 && x9 - 2 * x10 < 2 (3) f5294_0_slide93_EQ(x6) -> f5294_0_slide93_EQ'(x6) :|: x6 >= x7 && x6 - 2 * x8 = 0 (4) f5294_0_slide93_EQ'(x3) -> f5294_0_slide93_EQ(x4) :|: x3 >= x4 && x3 - 2 * x5 = 1 && x3 - 2 * x5 > -2 && x3 - 2 * x5 < 2 && x3 - 2 * x4 > -2 && x3 - 2 * x4 < 2 Arcs: (1) -> (4) (2) -> (1), (3) (3) -> (2) (4) -> (1), (3) This digraph is fully evaluated! ---------------------------------------- (27) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (28) Obligation: Rules: f5294_0_slide93_EQ(x6:0) -> f5294_0_slide93_EQ'(x6:0) :|: x7:0 <= x6:0 && x6:0 - 2 * x8:0 = 0 f5294_0_slide93_EQ'(x3:0) -> f5294_0_slide93_EQ(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 && x3:0 - 2 * x5:0 = 1 && x4:0 <= x3:0 f5294_0_slide93_EQ(x:0) -> f5294_0_slide93_EQ'(x:0) :|: x:0 >= x1:0 && x:0 - 2 * x2:0 = 1 f5294_0_slide93_EQ'(x9:0) -> f5294_0_slide93_EQ(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 = 0 && x9:0 >= x10:0 ---------------------------------------- (29) FilterProof (EQUIVALENT) Used the following sort dictionary for filtering: f5294_0_slide93_EQ(INTEGER) f5294_0_slide93_EQ'(INTEGER) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (30) Obligation: Rules: f5294_0_slide93_EQ(x6:0) -> f5294_0_slide93_EQ'(x6:0) :|: x7:0 <= x6:0 && x6:0 - 2 * x8:0 = 0 f5294_0_slide93_EQ'(x3:0) -> f5294_0_slide93_EQ(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 && x3:0 - 2 * x5:0 = 1 && x4:0 <= x3:0 f5294_0_slide93_EQ(x:0) -> f5294_0_slide93_EQ'(x:0) :|: x:0 >= x1:0 && x:0 - 2 * x2:0 = 1 f5294_0_slide93_EQ'(x9:0) -> f5294_0_slide93_EQ(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 = 0 && x9:0 >= x10:0 ---------------------------------------- (31) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (32) Obligation: Rules: f5294_0_slide93_EQ'(x9:0:0) -> f5294_0_slide93_EQ(x10:0:0) :|: x9:0:0 - 2 * x11:0:0 = 0 && x9:0:0 >= x10:0:0 && 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 f5294_0_slide93_EQ'(x3:0:0) -> f5294_0_slide93_EQ(x4:0:0) :|: x3:0:0 - 2 * x5:0:0 = 1 && 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 f5294_0_slide93_EQ(x:0:0) -> f5294_0_slide93_EQ'(x:0:0) :|: x:0:0 >= x1:0:0 && x:0:0 - 2 * x2:0:0 = 1 f5294_0_slide93_EQ(x6:0:0) -> f5294_0_slide93_EQ'(x6:0:0) :|: x7:0:0 <= x6:0:0 && x6:0:0 - 2 * x8:0:0 = 0 ---------------------------------------- (33) IntTRSPeriodicNontermProof (COMPLETE) Normalized system to the following form: f(pc, x9:0:0) -> f(2, x10:0:0) :|: pc = 1 && (x9:0:0 - 2 * x11:0:0 = 0 && x9:0:0 >= x10:0:0 && 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) f(pc, x3:0:0) -> f(2, x4:0:0) :|: pc = 1 && (x3:0:0 - 2 * x5:0:0 = 1 && 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) f(pc, x:0:0) -> f(1, x:0:0) :|: pc = 2 && (x:0:0 >= x1:0:0 && x:0:0 - 2 * x2:0:0 = 1) f(pc, x6:0:0) -> f(1, x6:0:0) :|: pc = 2 && (x7:0:0 <= x6:0:0 && x6:0:0 - 2 * x8:0:0 = 0) Witness term starting non-terminating reduction: f(1, 1) ---------------------------------------- (34) NO ---------------------------------------- (35) Obligation: SCC of termination graph based on JBC Program. SCC contains nodes from the following methods: Kernel93.main([Ljava/lang/String;)V SCC calls the following helper methods: Performed SCC analyses: *Used field analysis yielded the following read fields: *Kernel93: [next] *Marker field analysis yielded the following relations that could be markers: ---------------------------------------- (36) SCCToIRSProof (SOUND) Transformed FIGraph SCCs to intTRSs. Log: Generated rules. Obtained 57 IRulesP rules: f4032_0_slide93_EQ(EOS(STATIC_4032), i367, o1532[Kernel93.next]o1532) -> f4044_0_slide93_Load(EOS(STATIC_4044), i367, o1532[Kernel93.next]o1532) :|: TRUE f4044_0_slide93_Load(EOS(STATIC_4044), i367, o1532[Kernel93.next]o1532) -> f4059_0_slide93_Store(EOS(STATIC_4059), i367, o1532[Kernel93.next]o1532) :|: TRUE f4059_0_slide93_Store(EOS(STATIC_4059), i367, o1532[Kernel93.next]o1532) -> f4072_0_slide93_Load(EOS(STATIC_4072), i367, o1532[Kernel93.next]o1532) :|: TRUE f4072_0_slide93_Load(EOS(STATIC_4072), i367, o1532[Kernel93.next]o1532) -> f4083_0_slide93_InvokeMethod(EOS(STATIC_4083), i367, i367, o1532[Kernel93.next]o1532) :|: TRUE f4083_0_slide93_InvokeMethod(EOS(STATIC_4083), i367, i367, o1532[Kernel93.next]o1532) -> f4089_0_check_Load(EOS(STATIC_4089), i367, i367, o1532[Kernel93.next]o1532) :|: TRUE f4089_0_check_Load(EOS(STATIC_4089), i367, i367, o1532[Kernel93.next]o1532) -> f4094_0_check_ConstantStackPush(EOS(STATIC_4094), i367, i367, o1532[Kernel93.next]o1532) :|: TRUE f4094_0_check_ConstantStackPush(EOS(STATIC_4094), i367, i367, o1532[Kernel93.next]o1532) -> f4097_0_check_IntArithmetic(EOS(STATIC_4097), i367, i367, 2, o1532[Kernel93.next]o1532) :|: TRUE f4097_0_check_IntArithmetic(EOS(STATIC_4097), i367, i367, matching1, o1532[Kernel93.next]o1532) -> f4108_0_check_LE(EOS(STATIC_4108), i367, i367 % 2, o1532[Kernel93.next]o1532) :|: TRUE && matching1 = 2 f4108_0_check_LE(EOS(STATIC_4108), i367, matching1, o1532[Kernel93.next]o1532) -> f4116_0_check_LE(EOS(STATIC_4116), i367, 0, o1532[Kernel93.next]o1532) :|: TRUE && matching1 = 0 f4108_0_check_LE(EOS(STATIC_4108), i367, matching1, o1532[Kernel93.next]o1532) -> f4117_0_check_LE(EOS(STATIC_4117), i367, 1, o1532[Kernel93.next]o1532) :|: TRUE && matching1 = 1 f4116_0_check_LE(EOS(STATIC_4116), i367, matching1, o1532[Kernel93.next]o1532) -> f4129_0_check_ConstantStackPush(EOS(STATIC_4129), i367, o1532[Kernel93.next]o1532) :|: 0 <= 0 && matching1 = 0 f4129_0_check_ConstantStackPush(EOS(STATIC_4129), i367, o1532[Kernel93.next]o1532) -> f4145_0_check_Return(EOS(STATIC_4145), i367, 0, o1532[Kernel93.next]o1532) :|: TRUE f4145_0_check_Return(EOS(STATIC_4145), i367, matching1, o1532[Kernel93.next]o1532) -> f4162_0_slide93_EQ(EOS(STATIC_4162), i367, 0, o1532[Kernel93.next]o1532) :|: TRUE && matching1 = 0 f4162_0_slide93_EQ(EOS(STATIC_4162), i367, matching1, o1532[Kernel93.next]o1532) -> f4184_0_slide93_Load(EOS(STATIC_4184), i367, o1532[Kernel93.next]o1532) :|: TRUE && matching1 = 0 f4184_0_slide93_Load(EOS(STATIC_4184), i367, o1532[Kernel93.next]o1532) -> f4203_0_slide93_Store(EOS(STATIC_4203), i367, o1532[Kernel93.next]o1532) :|: TRUE f4203_0_slide93_Store(EOS(STATIC_4203), i367, o1532[Kernel93.next]o1532) -> f4211_0_slide93_Load(EOS(STATIC_4211), i367, o1532[Kernel93.next]o1532) :|: TRUE f4211_0_slide93_Load(EOS(STATIC_4211), i367, o1532[Kernel93.next]o1532) -> f4229_0_slide93_FieldAccess(EOS(STATIC_4229), i367, o1532[Kernel93.next]o1532) :|: TRUE f4229_0_slide93_FieldAccess(EOS(STATIC_4229), i367, o1731[Kernel93.next]o1731) -> f4238_0_slide93_FieldAccess(EOS(STATIC_4238), i367, o1732[Kernel93.next]o1731) :|: o1732[Kernel93.next]o1731 < o1731[Kernel93.next]o1731 && o1731[Kernel93.next]o1731 >= 0 f4238_0_slide93_FieldAccess(EOS(STATIC_4238), i367, o1732[Kernel93.next]o1731) -> f4272_0_slide93_FieldAccess(EOS(STATIC_4272), i367, o1732[Kernel93.next]o1731) :|: o1732[Kernel93.next]o1731 > 0 f4272_0_slide93_FieldAccess(EOS(STATIC_4272), i367, o1732[Kernel93.next]o1731) -> f4291_0_slide93_Store(EOS(STATIC_4291), i367, o1732[Kernel93.next]o1731) :|: TRUE f4291_0_slide93_Store(EOS(STATIC_4291), i367, o1732[Kernel93.next]o1731) -> f4295_0_slide93_Load(EOS(STATIC_4295), i367, o1732[Kernel93.next]o1731) :|: TRUE f4295_0_slide93_Load(EOS(STATIC_4295), i367, o1732[Kernel93.next]o1731) -> f4299_0_slide93_ConstantStackPush(EOS(STATIC_4299), i367, o1732[Kernel93.next]o1731) :|: TRUE f4299_0_slide93_ConstantStackPush(EOS(STATIC_4299), i367, o1732[Kernel93.next]o1731) -> f4385_0_slide93_IntArithmetic(EOS(STATIC_4385), i367, 2, o1732[Kernel93.next]o1731) :|: TRUE f4385_0_slide93_IntArithmetic(EOS(STATIC_4385), i367, matching1, o1732[Kernel93.next]o1731) -> f4422_0_slide93_Store(EOS(STATIC_4422), i452, o1732[Kernel93.next]o1731) :|: i452 = i367 / 2 && i452 <= i367 && matching1 = 2 f4422_0_slide93_Store(EOS(STATIC_4422), i452, o1732[Kernel93.next]o1731) -> f4558_0_slide93_JMP(EOS(STATIC_4558), i452, o1732[Kernel93.next]o1731) :|: TRUE f4558_0_slide93_JMP(EOS(STATIC_4558), i452, o1732[Kernel93.next]o1731) -> f4643_0_slide93_Load(EOS(STATIC_4643), i452, o1732[Kernel93.next]o1731) :|: TRUE f4643_0_slide93_Load(EOS(STATIC_4643), i452, o1732[Kernel93.next]o1731) -> f3994_0_slide93_Load(EOS(STATIC_3994), i452, o1732[Kernel93.next]o1732) :|: TRUE f3994_0_slide93_Load(EOS(STATIC_3994), i367, o1532[Kernel93.next]o1532) -> f3996_0_slide93_Load(EOS(STATIC_3996), i367, o1532[Kernel93.next]o1532) :|: TRUE f3996_0_slide93_Load(EOS(STATIC_3996), i367, o1532[Kernel93.next]o1532) -> f4011_0_slide93_EQ(EOS(STATIC_4011), i367, o1532[Kernel93.next]o1532) :|: TRUE f4011_0_slide93_EQ(EOS(STATIC_4011), i367, o1532[Kernel93.next]o1532) -> f4032_0_slide93_EQ(EOS(STATIC_4032), i367, o1532[Kernel93.next]o1532) :|: o1532[Kernel93.next]o1532 > 0 f4117_0_check_LE(EOS(STATIC_4117), i367, matching1, o1532[Kernel93.next]o1532) -> f4134_0_check_ConstantStackPush(EOS(STATIC_4134), i367, o1532[Kernel93.next]o1532) :|: 1 > 0 && matching1 = 1 f4134_0_check_ConstantStackPush(EOS(STATIC_4134), i367, o1532[Kernel93.next]o1532) -> f4150_0_check_JMP(EOS(STATIC_4150), i367, 1, o1532[Kernel93.next]o1532) :|: TRUE f4150_0_check_JMP(EOS(STATIC_4150), i367, matching1, o1532[Kernel93.next]o1532) -> f4168_0_check_Return(EOS(STATIC_4168), i367, 1, o1532[Kernel93.next]o1532) :|: TRUE && matching1 = 1 f4168_0_check_Return(EOS(STATIC_4168), i367, matching1, o1532[Kernel93.next]o1532) -> f4192_0_slide93_EQ(EOS(STATIC_4192), i367, 1, o1532[Kernel93.next]o1532) :|: TRUE && matching1 = 1 f4192_0_slide93_EQ(EOS(STATIC_4192), i367, matching1, o1532[Kernel93.next]o1532) -> f4207_0_slide93_Load(EOS(STATIC_4207), i367, o1532[Kernel93.next]o1532) :|: 1 > 0 && matching1 = 1 f4207_0_slide93_Load(EOS(STATIC_4207), i367, o1532[Kernel93.next]o1532) -> f4219_0_slide93_FieldAccess(EOS(STATIC_4219), i367, o1532[Kernel93.next]o1532) :|: TRUE f4219_0_slide93_FieldAccess(EOS(STATIC_4219), i367, o1729[Kernel93.next]o1729) -> f4234_0_slide93_FieldAccess(EOS(STATIC_4234), i367, o1730[Kernel93.next]o1729) :|: o1730[Kernel93.next]o1729 < o1729[Kernel93.next]o1729 && o1729[Kernel93.next]o1729 >= 0 f4234_0_slide93_FieldAccess(EOS(STATIC_4234), i367, o1730[Kernel93.next]o1729) -> f4255_0_slide93_FieldAccess(EOS(STATIC_4255), i367, o1730[Kernel93.next]o1729) :|: o1730[Kernel93.next]o1729 > 0 f4255_0_slide93_FieldAccess(EOS(STATIC_4255), i367, o1730[Kernel93.next]o1729) -> f4279_0_slide93_Store(EOS(STATIC_4279), i367, o1730[Kernel93.next]o1729) :|: TRUE f4279_0_slide93_Store(EOS(STATIC_4279), i367, o1730[Kernel93.next]o1729) -> f4293_0_slide93_Load(EOS(STATIC_4293), i367, o1730[Kernel93.next]o1729) :|: TRUE f4293_0_slide93_Load(EOS(STATIC_4293), i367, o1730[Kernel93.next]o1729) -> f4297_0_slide93_Load(EOS(STATIC_4297), i367, o1730[Kernel93.next]o1729) :|: TRUE f4297_0_slide93_Load(EOS(STATIC_4297), i367, o1730[Kernel93.next]o1729) -> f4353_0_slide93_FieldAccess(EOS(STATIC_4353), i367, o1730[Kernel93.next]o1729) :|: TRUE f4353_0_slide93_FieldAccess(EOS(STATIC_4353), i367, o1730[Kernel93.next]o1729) -> f4400_0_slide93_FieldAccess(EOS(STATIC_4400), i367, o1730[Kernel93.next]o1729) :|: TRUE f4400_0_slide93_FieldAccess(EOS(STATIC_4400), i367, o1730[Kernel93.next]o1729) -> f4554_0_slide93_Load(EOS(STATIC_4554), i367) :|: TRUE f4554_0_slide93_Load(EOS(STATIC_4554), i367) -> f4560_0_slide93_Load(EOS(STATIC_4560), i367) :|: TRUE f4560_0_slide93_Load(EOS(STATIC_4560), i367) -> f4736_0_slide93_FieldAccess(EOS(STATIC_4736), i367) :|: TRUE f4736_0_slide93_FieldAccess(EOS(STATIC_4736), i367) -> f4801_0_slide93_JMP(EOS(STATIC_4801), i367) :|: TRUE f4801_0_slide93_JMP(EOS(STATIC_4801), i367) -> f4862_0_slide93_Load(EOS(STATIC_4862), i367) :|: TRUE f4862_0_slide93_Load(EOS(STATIC_4862), i367) -> f4931_0_slide93_FieldAccess(EOS(STATIC_4931), i367) :|: TRUE f4931_0_slide93_FieldAccess(EOS(STATIC_4931), i367) -> f4964_0_slide93_Store(EOS(STATIC_4964), i367) :|: TRUE f4964_0_slide93_Store(EOS(STATIC_4964), i367) -> f5006_0_slide93_Load(EOS(STATIC_5006), i367) :|: TRUE f5006_0_slide93_Load(EOS(STATIC_5006), i367) -> f5063_0_slide93_ConstantStackPush(EOS(STATIC_5063), i367) :|: TRUE f5063_0_slide93_ConstantStackPush(EOS(STATIC_5063), i367) -> f5090_0_slide93_IntArithmetic(EOS(STATIC_5090), i367, 2) :|: TRUE f5090_0_slide93_IntArithmetic(EOS(STATIC_5090), i367, matching1) -> f5120_0_slide93_Store(EOS(STATIC_5120), i514) :|: i514 = i367 / 2 && i514 <= i367 && matching1 = 2 f5120_0_slide93_Store(EOS(STATIC_5120), i514) -> f5140_0_slide93_JMP(EOS(STATIC_5140), i514) :|: TRUE f5140_0_slide93_JMP(EOS(STATIC_5140), i514) -> f5185_0_slide93_Load(EOS(STATIC_5185), i514) :|: TRUE f5185_0_slide93_Load(EOS(STATIC_5185), i514) -> f3994_0_slide93_Load(EOS(STATIC_3994), i514, o1729[Kernel93.next]o1729) :|: o1729[Kernel93.next]o1729 = 1 Combined rules. Obtained 4 IRulesP rules: f4032_0_slide93_EQ(EOS(STATIC_4032), i367:0, o1532[Kernel93.next]o1532:0) -> f4032_0_slide93_EQ'(EOS(STATIC_4032), i367:0, o1532[Kernel93.next]o1532:0) :|: i367:0 - 2 * div = 1 && o1532[Kernel93.next]o1532:0 > -1 && o1730[Kernel93.next]o1729:0 < o1532[Kernel93.next]o1532:0 && i367:0 >= div1 && o1730[Kernel93.next]o1729:0 > 0 f4032_0_slide93_EQ'(EOS(STATIC_4032), i367:0, o1532[Kernel93.next]o1532:0) -> f4032_0_slide93_EQ(EOS(STATIC_4032), div1, 1) :|: i367:0 - 2 * div = 1 && o1532[Kernel93.next]o1532:0 > -1 && o1730[Kernel93.next]o1729:0 < o1532[Kernel93.next]o1532:0 && o1730[Kernel93.next]o1729:0 > 0 && i367:0 >= div1 && i367:0 - 2 * div > -2 && i367:0 - 2 * div < 2 && i367:0 - 2 * div1 < 2 && i367:0 - 2 * div1 > -2 f4032_0_slide93_EQ(EOS(STATIC_4032), i367:0, o1532[Kernel93.next]o1532:0) -> f4032_0_slide93_EQ'(EOS(STATIC_4032), i367:0, o1532[Kernel93.next]o1532:0) :|: i367:0 - 2 * div = 0 && o1532[Kernel93.next]o1532:0 > -1 && o1732[Kernel93.next]o1731:0 < o1532[Kernel93.next]o1532:0 && o1732[Kernel93.next]o1731:0 > 0 && o1732[Kernel93.next]o1732:0 > 0 && i367:0 >= div1 f4032_0_slide93_EQ'(EOS(STATIC_4032), i367:0, o1532[Kernel93.next]o1532:0) -> f4032_0_slide93_EQ(EOS(STATIC_4032), div1, o1732[Kernel93.next]o1732:0) :|: i367:0 - 2 * div = 0 && o1532[Kernel93.next]o1532:0 > -1 && o1732[Kernel93.next]o1731:0 < o1532[Kernel93.next]o1532:0 && o1732[Kernel93.next]o1731:0 > 0 && i367:0 >= div1 && o1732[Kernel93.next]o1732:0 > 0 && i367:0 - 2 * div > -2 && i367:0 - 2 * div < 2 && i367:0 - 2 * div1 < 2 && i367:0 - 2 * div1 > -2 Filtered constant ground arguments: f4032_0_slide93_EQ(x1, x2, x3) -> f4032_0_slide93_EQ(x2, x3) f4032_0_slide93_EQ'(x1, x2, x3) -> f4032_0_slide93_EQ'(x2, x3) EOS(x1) -> EOS Finished conversion. Obtained 4 rules.P rules: f4032_0_slide93_EQ(i367:0, o1532[Kernel93.next]o1532:0) -> f4032_0_slide93_EQ'(i367:0, o1532[Kernel93.next]o1532:0) :|: o1532[Kernel93.next]o1532:0 > -1 && i367:0 - 2 * div = 1 && o1730[Kernel93.next]o1729:0 < o1532[Kernel93.next]o1532:0 && o1730[Kernel93.next]o1729:0 > 0 && i367:0 >= div1 f4032_0_slide93_EQ'(i367:0, o1532[Kernel93.next]o1532:0) -> f4032_0_slide93_EQ(div1, 1) :|: o1532[Kernel93.next]o1532:0 > -1 && i367:0 - 2 * div = 1 && o1730[Kernel93.next]o1729:0 < o1532[Kernel93.next]o1532:0 && o1730[Kernel93.next]o1729:0 > 0 && i367:0 >= div1 && i367:0 - 2 * div > -2 && i367:0 - 2 * div < 2 && i367:0 - 2 * div1 > -2 && i367:0 - 2 * div1 < 2 f4032_0_slide93_EQ(i367:0, o1532[Kernel93.next]o1532:0) -> f4032_0_slide93_EQ'(i367:0, o1532[Kernel93.next]o1532:0) :|: o1532[Kernel93.next]o1532:0 > -1 && i367:0 - 2 * div = 0 && o1732[Kernel93.next]o1731:0 < o1532[Kernel93.next]o1532:0 && o1732[Kernel93.next]o1731:0 > 0 && i367:0 >= div1 && o1732[Kernel93.next]o1732:0 > 0 f4032_0_slide93_EQ'(i367:0, o1532[Kernel93.next]o1532:0) -> f4032_0_slide93_EQ(div1, o1732[Kernel93.next]o1732:0) :|: o1532[Kernel93.next]o1532:0 > -1 && i367:0 - 2 * div = 0 && o1732[Kernel93.next]o1731:0 < o1532[Kernel93.next]o1532:0 && o1732[Kernel93.next]o1731:0 > 0 && i367:0 >= div1 && o1732[Kernel93.next]o1732:0 > 0 && i367:0 - 2 * div > -2 && i367:0 - 2 * div < 2 && i367:0 - 2 * div1 > -2 && i367:0 - 2 * div1 < 2 ---------------------------------------- (37) Obligation: Rules: f4032_0_slide93_EQ(x, x1) -> f4032_0_slide93_EQ'(x, x1) :|: x1 > -1 && x - 2 * x2 = 1 && x3 < x1 && x3 > 0 && x >= x4 f4032_0_slide93_EQ'(x5, x6) -> f4032_0_slide93_EQ(x7, 1) :|: x6 > -1 && x5 - 2 * x8 = 1 && x9 < x6 && x9 > 0 && x5 >= x7 && x5 - 2 * x8 > -2 && x5 - 2 * x8 < 2 && x5 - 2 * x7 > -2 && x5 - 2 * x7 < 2 f4032_0_slide93_EQ(x10, x11) -> f4032_0_slide93_EQ'(x10, x11) :|: x11 > -1 && x10 - 2 * x12 = 0 && x13 < x11 && x13 > 0 && x10 >= x14 && x15 > 0 f4032_0_slide93_EQ'(x16, x17) -> f4032_0_slide93_EQ(x18, x19) :|: x17 > -1 && x16 - 2 * x20 = 0 && x21 < x17 && x21 > 0 && x16 >= x18 && x19 > 0 && x16 - 2 * x20 > -2 && x16 - 2 * x20 < 2 && x16 - 2 * x18 > -2 && x16 - 2 * x18 < 2 ---------------------------------------- (38) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (39) Obligation: Rules: f4032_0_slide93_EQ(x, x1) -> f4032_0_slide93_EQ'(x, x1) :|: x1 > -1 && x - 2 * x2 = 1 && x3 < x1 && x3 > 0 && x >= x4 f4032_0_slide93_EQ'(x5, x6) -> f4032_0_slide93_EQ(x7, 1) :|: x6 > -1 && x5 - 2 * x8 = 1 && x9 < x6 && x9 > 0 && x5 >= x7 && x5 - 2 * x8 > -2 && x5 - 2 * x8 < 2 && x5 - 2 * x7 > -2 && x5 - 2 * x7 < 2 f4032_0_slide93_EQ(x10, x11) -> f4032_0_slide93_EQ'(x10, x11) :|: x11 > -1 && x10 - 2 * x12 = 0 && x13 < x11 && x13 > 0 && x10 >= x14 && x15 > 0 f4032_0_slide93_EQ'(x16, x17) -> f4032_0_slide93_EQ(x18, x19) :|: x17 > -1 && x16 - 2 * x20 = 0 && x21 < x17 && x21 > 0 && x16 >= x18 && x19 > 0 && x16 - 2 * x20 > -2 && x16 - 2 * x20 < 2 && x16 - 2 * x18 > -2 && x16 - 2 * x18 < 2 ---------------------------------------- (40) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f4032_0_slide93_EQ(x, x1) -> f4032_0_slide93_EQ'(x, x1) :|: x1 > -1 && x - 2 * x2 = 1 && x3 < x1 && x3 > 0 && x >= x4 (2) f4032_0_slide93_EQ'(x5, x6) -> f4032_0_slide93_EQ(x7, 1) :|: x6 > -1 && x5 - 2 * x8 = 1 && x9 < x6 && x9 > 0 && x5 >= x7 && x5 - 2 * x8 > -2 && x5 - 2 * x8 < 2 && x5 - 2 * x7 > -2 && x5 - 2 * x7 < 2 (3) f4032_0_slide93_EQ(x10, x11) -> f4032_0_slide93_EQ'(x10, x11) :|: x11 > -1 && x10 - 2 * x12 = 0 && x13 < x11 && x13 > 0 && x10 >= x14 && x15 > 0 (4) f4032_0_slide93_EQ'(x16, x17) -> f4032_0_slide93_EQ(x18, x19) :|: x17 > -1 && x16 - 2 * x20 = 0 && x21 < x17 && x21 > 0 && x16 >= x18 && x19 > 0 && x16 - 2 * x20 > -2 && x16 - 2 * x20 < 2 && x16 - 2 * x18 > -2 && x16 - 2 * x18 < 2 Arcs: (1) -> (2) (3) -> (4) (4) -> (1), (3) This digraph is fully evaluated! ---------------------------------------- (41) Obligation: Termination digraph: Nodes: (1) f4032_0_slide93_EQ(x10, x11) -> f4032_0_slide93_EQ'(x10, x11) :|: x11 > -1 && x10 - 2 * x12 = 0 && x13 < x11 && x13 > 0 && x10 >= x14 && x15 > 0 (2) f4032_0_slide93_EQ'(x16, x17) -> f4032_0_slide93_EQ(x18, x19) :|: x17 > -1 && x16 - 2 * x20 = 0 && x21 < x17 && x21 > 0 && x16 >= x18 && x19 > 0 && x16 - 2 * x20 > -2 && x16 - 2 * x20 < 2 && x16 - 2 * x18 > -2 && x16 - 2 * x18 < 2 Arcs: (1) -> (2) (2) -> (1) This digraph is fully evaluated! ---------------------------------------- (42) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (43) Obligation: Rules: f4032_0_slide93_EQ(x10:0, x11:0) -> f4032_0_slide93_EQ(x18:0, x19:0) :|: x10:0 - 2 * x18:0 < 2 && x15:0 > 0 && x14:0 <= x10:0 && x10:0 - 2 * x18:0 > -2 && x13:0 > 0 && x10:0 - 2 * x20:0 < 2 && x13:0 < x11:0 && x10:0 - 2 * x20:0 > -2 && x10:0 - 2 * x12:0 = 0 && x19:0 > 0 && x18:0 <= x10:0 && x21:0 > 0 && x21:0 < x11:0 && x10:0 - 2 * x20:0 = 0 && x11:0 > -1 ---------------------------------------- (44) FilterProof (EQUIVALENT) Used the following sort dictionary for filtering: f4032_0_slide93_EQ(INTEGER, INTEGER) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (45) Obligation: Rules: f4032_0_slide93_EQ(x10:0, x11:0) -> f4032_0_slide93_EQ(x18:0, x19:0) :|: x10:0 - 2 * x18:0 < 2 && x15:0 > 0 && x14:0 <= x10:0 && x10:0 - 2 * x18:0 > -2 && x13:0 > 0 && x10:0 - 2 * x20:0 < 2 && x13:0 < x11:0 && x10:0 - 2 * x20:0 > -2 && x10:0 - 2 * x12:0 = 0 && x19:0 > 0 && x18:0 <= x10:0 && x21:0 > 0 && x21:0 < x11:0 && x10:0 - 2 * x20:0 = 0 && x11:0 > -1 ---------------------------------------- (46) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (47) Obligation: Rules: f4032_0_slide93_EQ(x10:0:0, x11:0:0) -> f4032_0_slide93_EQ(x18:0:0, x19:0:0) :|: x10:0:0 - 2 * x20:0:0 = 0 && x11:0:0 > -1 && x21:0:0 < x11:0:0 && x21:0:0 > 0 && x18:0:0 <= x10:0:0 && x19:0:0 > 0 && x10:0:0 - 2 * x12:0:0 = 0 && x10:0:0 - 2 * x20:0:0 > -2 && x13:0:0 < x11:0:0 && x10:0:0 - 2 * x20:0:0 < 2 && x13:0:0 > 0 && x10:0:0 - 2 * x18:0:0 > -2 && x14:0:0 <= x10:0:0 && x15:0:0 > 0 && x10:0:0 - 2 * x18:0:0 < 2 ---------------------------------------- (48) IntTRSPeriodicNontermProof (COMPLETE) Normalized system to the following form: f(pc, x10:0:0, x11:0:0) -> f(1, x18:0:0, x19:0:0) :|: pc = 1 && (x10:0:0 - 2 * x20:0:0 = 0 && x11:0:0 > -1 && x21:0:0 < x11:0:0 && x21:0:0 > 0 && x18:0:0 <= x10:0:0 && x19:0:0 > 0 && x10:0:0 - 2 * x12:0:0 = 0 && x10:0:0 - 2 * x20:0:0 > -2 && x13:0:0 < x11:0:0 && x10:0:0 - 2 * x20:0:0 < 2 && x13:0:0 > 0 && x10:0:0 - 2 * x18:0:0 > -2 && x14:0:0 <= x10:0:0 && x15:0:0 > 0 && x10:0:0 - 2 * x18:0:0 < 2) Witness term starting non-terminating reduction: f(1, 0, 15) ---------------------------------------- (49) NO