/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: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 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, 815 ms] (4) JBCTerminationGraph (5) TerminationGraphToSCCProof [SOUND, 0 ms] (6) AND (7) JBCTerminationSCC (8) SCCToIRSProof [SOUND, 37 ms] (9) IRSwT (10) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (11) IRSwT (12) IRSwTTerminationDigraphProof [EQUIVALENT, 13 ms] (13) IRSwT (14) IntTRSCompressionProof [EQUIVALENT, 0 ms] (15) IRSwT (16) TempFilterProof [SOUND, 9 ms] (17) IntTRS (18) PolynomialOrderProcessor [EQUIVALENT, 0 ms] (19) YES (20) JBCTerminationSCC (21) SCCToIRSProof [SOUND, 81 ms] (22) IRSwT (23) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (24) IRSwT (25) IRSwTTerminationDigraphProof [EQUIVALENT, 64 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, 0 ms] (34) NO (35) JBCTerminationSCC (36) SCCToIRSProof [SOUND, 95 ms] (37) IRSwT (38) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (39) IRSwT (40) IRSwTTerminationDigraphProof [EQUIVALENT, 58 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, 0 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: f907_0_create_Load(EOS(STATIC_907), i84, o74[Kernel93.next]o73) -> f912_0_create_LE(EOS(STATIC_912), i84, i84, o74[Kernel93.next]o73) :|: TRUE f912_0_create_LE(EOS(STATIC_912), i86, i86, o74[Kernel93.next]o73) -> f920_0_create_LE(EOS(STATIC_920), i86, i86, o74[Kernel93.next]o73) :|: TRUE f920_0_create_LE(EOS(STATIC_920), i86, i86, o74[Kernel93.next]o73) -> f927_0_create_New(EOS(STATIC_927), i86, o74[Kernel93.next]o73) :|: i86 > 0 f927_0_create_New(EOS(STATIC_927), i86, o74[Kernel93.next]o73) -> f935_0_create_Duplicate(EOS(STATIC_935), i86, o74[Kernel93.next]o73) :|: TRUE f935_0_create_Duplicate(EOS(STATIC_935), i86, o74[Kernel93.next]o73) -> f941_0_create_Load(EOS(STATIC_941), i86, o74[Kernel93.next]o73) :|: TRUE f941_0_create_Load(EOS(STATIC_941), i86, o74[Kernel93.next]o73) -> f945_0_create_InvokeMethod(EOS(STATIC_945), i86, o74[Kernel93.next]o73) :|: TRUE f945_0_create_InvokeMethod(EOS(STATIC_945), i86, o74[Kernel93.next]o73) -> f965_0__init__Load(EOS(STATIC_965), i86, o74[Kernel93.next]o73) :|: TRUE f965_0__init__Load(EOS(STATIC_965), i86, o74[Kernel93.next]o73) -> f996_0__init__InvokeMethod(EOS(STATIC_996), i86, o74[Kernel93.next]o73) :|: TRUE f996_0__init__InvokeMethod(EOS(STATIC_996), i86, o74[Kernel93.next]o73) -> f1004_0__init__Load(EOS(STATIC_1004), i86, o74[Kernel93.next]o73) :|: TRUE f1004_0__init__Load(EOS(STATIC_1004), i86, o74[Kernel93.next]o73) -> f1025_0__init__Load(EOS(STATIC_1025), i86, o74[Kernel93.next]o73) :|: TRUE f1025_0__init__Load(EOS(STATIC_1025), i86, o74[Kernel93.next]o73) -> f1028_0__init__FieldAccess(EOS(STATIC_1028), i86, o74[Kernel93.next]o73) :|: TRUE f1028_0__init__FieldAccess(EOS(STATIC_1028), i86, o74[Kernel93.next]o73) -> f1035_0__init__Return(EOS(STATIC_1035), i86, o74[Kernel93.next]o73) :|: TRUE f1035_0__init__Return(EOS(STATIC_1035), i86, o74[Kernel93.next]o73) -> f1040_0_create_Store(EOS(STATIC_1040), i86, o74[Kernel93.next]o73) :|: TRUE f1040_0_create_Store(EOS(STATIC_1040), i86, o74[Kernel93.next]o73) -> f1045_0_create_JMP(EOS(STATIC_1045), i86, o74[Kernel93.next]o73) :|: TRUE f1045_0_create_JMP(EOS(STATIC_1045), i86, o74[Kernel93.next]o73) -> f1158_0_create_Inc(EOS(STATIC_1158), i86, o74[Kernel93.next]o73) :|: TRUE f1158_0_create_Inc(EOS(STATIC_1158), i86, o74[Kernel93.next]o73) -> f899_0_create_Inc(EOS(STATIC_899), i86, o82[Kernel93.next]o73) :|: TRUE f899_0_create_Inc(EOS(STATIC_899), i55, o74[Kernel93.next]o73) -> f907_0_create_Load(EOS(STATIC_907), i55 + -1, o74[Kernel93.next]o73) :|: TRUE Combined rules. Obtained 1 IRulesP rules: f907_0_create_Load(EOS(STATIC_907), i84:0, o74[Kernel93.next]o73:0) -> f907_0_create_Load(EOS(STATIC_907), i84:0 - 1, o82[Kernel93.next]o73:0) :|: i84:0 > 0 Filtered constant ground arguments: f907_0_create_Load(x1, x2, x3) -> f907_0_create_Load(x2, x3) EOS(x1) -> EOS Filtered unneeded arguments: f907_0_create_Load(x1, x2) -> f907_0_create_Load(x1) Finished conversion. Obtained 1 rules.P rules: f907_0_create_Load(i84:0) -> f907_0_create_Load(i84:0 - 1) :|: i84:0 > 0 ---------------------------------------- (9) Obligation: Rules: f907_0_create_Load(i84:0) -> f907_0_create_Load(i84:0 - 1) :|: i84:0 > 0 ---------------------------------------- (10) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (11) Obligation: Rules: f907_0_create_Load(i84:0) -> f907_0_create_Load(arith) :|: i84:0 > 0 && arith = i84:0 - 1 ---------------------------------------- (12) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f907_0_create_Load(i84:0) -> f907_0_create_Load(arith) :|: i84:0 > 0 && arith = i84:0 - 1 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (13) Obligation: Termination digraph: Nodes: (1) f907_0_create_Load(i84:0) -> f907_0_create_Load(arith) :|: i84:0 > 0 && arith = i84:0 - 1 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (14) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (15) Obligation: Rules: f907_0_create_Load(i84:0:0) -> f907_0_create_Load(i84:0:0 - 1) :|: i84:0:0 > 0 ---------------------------------------- (16) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f907_0_create_Load(INTEGER) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (17) Obligation: Rules: f907_0_create_Load(i84:0:0) -> f907_0_create_Load(c) :|: c = i84:0:0 - 1 && i84:0:0 > 0 ---------------------------------------- (18) PolynomialOrderProcessor (EQUIVALENT) Found the following polynomial interpretation: [f907_0_create_Load(x)] = x The following rules are decreasing: f907_0_create_Load(i84:0:0) -> f907_0_create_Load(c) :|: c = i84:0:0 - 1 && i84:0:0 > 0 The following rules are bounded: f907_0_create_Load(i84:0:0) -> f907_0_create_Load(c) :|: c = i84:0:0 - 1 && i84: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: f6678_0_slide93_EQ(EOS(STATIC_6678), i623) -> f6680_0_slide93_Load(EOS(STATIC_6680), i623) :|: TRUE f6680_0_slide93_Load(EOS(STATIC_6680), i623) -> f6682_0_slide93_Store(EOS(STATIC_6682), i623) :|: TRUE f6682_0_slide93_Store(EOS(STATIC_6682), i623) -> f6683_0_slide93_Load(EOS(STATIC_6683), i623) :|: TRUE f6683_0_slide93_Load(EOS(STATIC_6683), i623) -> f6684_0_slide93_InvokeMethod(EOS(STATIC_6684), i623, i623) :|: TRUE f6684_0_slide93_InvokeMethod(EOS(STATIC_6684), i623, i623) -> f6685_0_check_Load(EOS(STATIC_6685), i623, i623) :|: TRUE f6685_0_check_Load(EOS(STATIC_6685), i623, i623) -> f6686_0_check_ConstantStackPush(EOS(STATIC_6686), i623, i623) :|: TRUE f6686_0_check_ConstantStackPush(EOS(STATIC_6686), i623, i623) -> f6687_0_check_IntArithmetic(EOS(STATIC_6687), i623, i623, 2) :|: TRUE f6687_0_check_IntArithmetic(EOS(STATIC_6687), i623, i623, matching1) -> f6688_0_check_LE(EOS(STATIC_6688), i623, i623 % 2) :|: TRUE && matching1 = 2 f6688_0_check_LE(EOS(STATIC_6688), i623, matching1) -> f6689_0_check_LE(EOS(STATIC_6689), i623, 0) :|: TRUE && matching1 = 0 f6688_0_check_LE(EOS(STATIC_6688), i623, matching1) -> f6690_0_check_LE(EOS(STATIC_6690), i623, 1) :|: TRUE && matching1 = 1 f6689_0_check_LE(EOS(STATIC_6689), i623, matching1) -> f6691_0_check_ConstantStackPush(EOS(STATIC_6691), i623) :|: 0 <= 0 && matching1 = 0 f6691_0_check_ConstantStackPush(EOS(STATIC_6691), i623) -> f6693_0_check_Return(EOS(STATIC_6693), i623, 0) :|: TRUE f6693_0_check_Return(EOS(STATIC_6693), i623, matching1) -> f6695_0_slide93_EQ(EOS(STATIC_6695), i623, 0) :|: TRUE && matching1 = 0 f6695_0_slide93_EQ(EOS(STATIC_6695), i623, matching1) -> f6735_0_slide93_Load(EOS(STATIC_6735), i623) :|: TRUE && matching1 = 0 f6735_0_slide93_Load(EOS(STATIC_6735), i623) -> f6745_0_slide93_Store(EOS(STATIC_6745), i623) :|: TRUE f6745_0_slide93_Store(EOS(STATIC_6745), i623) -> f6759_0_slide93_Load(EOS(STATIC_6759), i623) :|: TRUE f6759_0_slide93_Load(EOS(STATIC_6759), i623) -> f6768_0_slide93_FieldAccess(EOS(STATIC_6768), i623) :|: TRUE f6768_0_slide93_FieldAccess(EOS(STATIC_6768), i623) -> f6814_0_slide93_Store(EOS(STATIC_6814), i623) :|: TRUE f6814_0_slide93_Store(EOS(STATIC_6814), i623) -> f6828_0_slide93_Load(EOS(STATIC_6828), i623) :|: TRUE f6828_0_slide93_Load(EOS(STATIC_6828), i623) -> f6839_0_slide93_ConstantStackPush(EOS(STATIC_6839), i623) :|: TRUE f6839_0_slide93_ConstantStackPush(EOS(STATIC_6839), i623) -> f6908_0_slide93_IntArithmetic(EOS(STATIC_6908), i623, 2) :|: TRUE f6908_0_slide93_IntArithmetic(EOS(STATIC_6908), i623, matching1) -> f6920_0_slide93_Store(EOS(STATIC_6920), i713) :|: i713 = i623 / 2 && i713 <= i623 && matching1 = 2 f6920_0_slide93_Store(EOS(STATIC_6920), i713) -> f6960_0_slide93_JMP(EOS(STATIC_6960), i713) :|: TRUE f6960_0_slide93_JMP(EOS(STATIC_6960), i713) -> f6975_0_slide93_Load(EOS(STATIC_6975), i713) :|: TRUE f6975_0_slide93_Load(EOS(STATIC_6975), i713) -> f6639_0_slide93_Load(EOS(STATIC_6639), i713) :|: TRUE f6639_0_slide93_Load(EOS(STATIC_6639), i623) -> f6676_0_slide93_Load(EOS(STATIC_6676), i623) :|: TRUE f6676_0_slide93_Load(EOS(STATIC_6676), i623) -> f6677_0_slide93_EQ(EOS(STATIC_6677), i623) :|: TRUE f6677_0_slide93_EQ(EOS(STATIC_6677), i623) -> f6678_0_slide93_EQ(EOS(STATIC_6678), i623) :|: TRUE f6690_0_check_LE(EOS(STATIC_6690), i623, matching1) -> f6692_0_check_ConstantStackPush(EOS(STATIC_6692), i623) :|: 1 > 0 && matching1 = 1 f6692_0_check_ConstantStackPush(EOS(STATIC_6692), i623) -> f6694_0_check_JMP(EOS(STATIC_6694), i623, 1) :|: TRUE f6694_0_check_JMP(EOS(STATIC_6694), i623, matching1) -> f6730_0_check_Return(EOS(STATIC_6730), i623, 1) :|: TRUE && matching1 = 1 f6730_0_check_Return(EOS(STATIC_6730), i623, matching1) -> f6741_0_slide93_EQ(EOS(STATIC_6741), i623, 1) :|: TRUE && matching1 = 1 f6741_0_slide93_EQ(EOS(STATIC_6741), i623, matching1) -> f6749_0_slide93_Load(EOS(STATIC_6749), i623) :|: 1 > 0 && matching1 = 1 f6749_0_slide93_Load(EOS(STATIC_6749), i623) -> f6763_0_slide93_FieldAccess(EOS(STATIC_6763), i623) :|: TRUE f6763_0_slide93_FieldAccess(EOS(STATIC_6763), i623) -> f6793_0_slide93_Store(EOS(STATIC_6793), i623) :|: TRUE f6793_0_slide93_Store(EOS(STATIC_6793), i623) -> f6820_0_slide93_Load(EOS(STATIC_6820), i623) :|: TRUE f6820_0_slide93_Load(EOS(STATIC_6820), i623) -> f6832_0_slide93_Load(EOS(STATIC_6832), i623) :|: TRUE f6832_0_slide93_Load(EOS(STATIC_6832), i623) -> f6852_0_slide93_FieldAccess(EOS(STATIC_6852), i623) :|: TRUE f6852_0_slide93_FieldAccess(EOS(STATIC_6852), i623) -> f6916_0_slide93_FieldAccess(EOS(STATIC_6916), i623) :|: TRUE f6916_0_slide93_FieldAccess(EOS(STATIC_6916), i623) -> f6958_0_slide93_FieldAccess(EOS(STATIC_6958), i623) :|: TRUE f6916_0_slide93_FieldAccess(EOS(STATIC_6916), i623) -> f6959_0_slide93_FieldAccess(EOS(STATIC_6959), i623) :|: TRUE f6958_0_slide93_FieldAccess(EOS(STATIC_6958), i623) -> f6961_0_slide93_FieldAccess(EOS(STATIC_6961), i623) :|: TRUE f6958_0_slide93_FieldAccess(EOS(STATIC_6958), i623) -> f6962_0_slide93_FieldAccess(EOS(STATIC_6962), i623) :|: TRUE f6961_0_slide93_FieldAccess(EOS(STATIC_6961), i623) -> f6988_0_slide93_Load(EOS(STATIC_6988), i623) :|: TRUE f6988_0_slide93_Load(EOS(STATIC_6988), i623) -> f7007_0_slide93_Load(EOS(STATIC_7007), i623) :|: TRUE f7007_0_slide93_Load(EOS(STATIC_7007), i623) -> f7026_0_slide93_FieldAccess(EOS(STATIC_7026), i623) :|: TRUE f7026_0_slide93_FieldAccess(EOS(STATIC_7026), i623) -> f7035_0_slide93_JMP(EOS(STATIC_7035), i623) :|: TRUE f7035_0_slide93_JMP(EOS(STATIC_7035), i623) -> f7038_0_slide93_Load(EOS(STATIC_7038), i623) :|: TRUE f7038_0_slide93_Load(EOS(STATIC_7038), i623) -> f7041_0_slide93_FieldAccess(EOS(STATIC_7041), i623) :|: TRUE f7041_0_slide93_FieldAccess(EOS(STATIC_7041), i623) -> f7043_0_slide93_Store(EOS(STATIC_7043), i623) :|: TRUE f7043_0_slide93_Store(EOS(STATIC_7043), i623) -> f7045_0_slide93_Load(EOS(STATIC_7045), i623) :|: TRUE f7045_0_slide93_Load(EOS(STATIC_7045), i623) -> f7049_0_slide93_ConstantStackPush(EOS(STATIC_7049), i623) :|: TRUE f7049_0_slide93_ConstantStackPush(EOS(STATIC_7049), i623) -> f7057_0_slide93_IntArithmetic(EOS(STATIC_7057), i623, 2) :|: TRUE f7057_0_slide93_IntArithmetic(EOS(STATIC_7057), i623, matching1) -> f7066_0_slide93_Store(EOS(STATIC_7066), i776) :|: i776 = i623 / 2 && i776 <= i623 && matching1 = 2 f7066_0_slide93_Store(EOS(STATIC_7066), i776) -> f7079_0_slide93_JMP(EOS(STATIC_7079), i776) :|: TRUE f7079_0_slide93_JMP(EOS(STATIC_7079), i776) -> f7154_0_slide93_Load(EOS(STATIC_7154), i776) :|: TRUE f7154_0_slide93_Load(EOS(STATIC_7154), i776) -> f6639_0_slide93_Load(EOS(STATIC_6639), i776) :|: TRUE f6962_0_slide93_FieldAccess(EOS(STATIC_6962), i623) -> f6997_0_slide93_Load(EOS(STATIC_6997), i623) :|: TRUE f6997_0_slide93_Load(EOS(STATIC_6997), i623) -> f7023_0_slide93_Load(EOS(STATIC_7023), i623) :|: TRUE f7023_0_slide93_Load(EOS(STATIC_7023), i623) -> f7033_0_slide93_FieldAccess(EOS(STATIC_7033), i623) :|: TRUE f7033_0_slide93_FieldAccess(EOS(STATIC_7033), i623) -> f7036_0_slide93_JMP(EOS(STATIC_7036), i623) :|: TRUE f7036_0_slide93_JMP(EOS(STATIC_7036), i623) -> f7039_0_slide93_Load(EOS(STATIC_7039), i623) :|: TRUE f7039_0_slide93_Load(EOS(STATIC_7039), i623) -> f6759_0_slide93_Load(EOS(STATIC_6759), i623) :|: TRUE f6959_0_slide93_FieldAccess(EOS(STATIC_6959), i623) -> f6963_0_slide93_Load(EOS(STATIC_6963), i623) :|: TRUE f6963_0_slide93_Load(EOS(STATIC_6963), i623) -> f7001_0_slide93_Load(EOS(STATIC_7001), i623) :|: TRUE f7001_0_slide93_Load(EOS(STATIC_7001), i623) -> f7024_0_slide93_FieldAccess(EOS(STATIC_7024), i623) :|: TRUE f7024_0_slide93_FieldAccess(EOS(STATIC_7024), i623) -> f7034_0_slide93_JMP(EOS(STATIC_7034), i623) :|: TRUE f7034_0_slide93_JMP(EOS(STATIC_7034), i623) -> f7037_0_slide93_Load(EOS(STATIC_7037), i623) :|: TRUE f7037_0_slide93_Load(EOS(STATIC_7037), i623) -> f7040_0_slide93_FieldAccess(EOS(STATIC_7040), i623) :|: TRUE f7040_0_slide93_FieldAccess(EOS(STATIC_7040), i623) -> f7042_0_slide93_Store(EOS(STATIC_7042), i623) :|: TRUE f7042_0_slide93_Store(EOS(STATIC_7042), i623) -> f7044_0_slide93_Load(EOS(STATIC_7044), i623) :|: TRUE f7044_0_slide93_Load(EOS(STATIC_7044), i623) -> f7046_0_slide93_ConstantStackPush(EOS(STATIC_7046), i623) :|: TRUE f7046_0_slide93_ConstantStackPush(EOS(STATIC_7046), i623) -> f7050_0_slide93_IntArithmetic(EOS(STATIC_7050), i623, 2) :|: TRUE f7050_0_slide93_IntArithmetic(EOS(STATIC_7050), i623, matching1) -> f7058_0_slide93_Store(EOS(STATIC_7058), i775) :|: i775 = i623 / 2 && i775 <= i623 && matching1 = 2 f7058_0_slide93_Store(EOS(STATIC_7058), i775) -> f7071_0_slide93_JMP(EOS(STATIC_7071), i775) :|: TRUE f7071_0_slide93_JMP(EOS(STATIC_7071), i775) -> f7153_0_slide93_Load(EOS(STATIC_7153), i775) :|: TRUE f7153_0_slide93_Load(EOS(STATIC_7153), i775) -> f6639_0_slide93_Load(EOS(STATIC_6639), i775) :|: TRUE Combined rules. Obtained 4 IRulesP rules: f6678_0_slide93_EQ(EOS(STATIC_6678), i623:0) -> f6678_0_slide93_EQ'(EOS(STATIC_6678), i623:0) :|: i623:0 >= div1 && i623:0 - 2 * div = 1 f6678_0_slide93_EQ'(EOS(STATIC_6678), i623:0) -> f6678_0_slide93_EQ(EOS(STATIC_6678), div1) :|: i623:0 - 2 * div = 1 && i623:0 >= div1 && i623:0 - 2 * div > -2 && i623:0 - 2 * div < 2 && i623:0 - 2 * div1 < 2 && i623:0 - 2 * div1 > -2 f6678_0_slide93_EQ(EOS(STATIC_6678), i623:0) -> f6678_0_slide93_EQ'(EOS(STATIC_6678), i623:0) :|: i623:0 >= div1 && i623:0 - 2 * div = 0 f6678_0_slide93_EQ'(EOS(STATIC_6678), i623:0) -> f6678_0_slide93_EQ(EOS(STATIC_6678), div1) :|: i623:0 - 2 * div = 0 && i623:0 >= div1 && i623:0 - 2 * div > -2 && i623:0 - 2 * div < 2 && i623:0 - 2 * div1 < 2 && i623:0 - 2 * div1 > -2 Filtered constant ground arguments: f6678_0_slide93_EQ(x1, x2) -> f6678_0_slide93_EQ(x2) f6678_0_slide93_EQ'(x1, x2) -> f6678_0_slide93_EQ'(x2) EOS(x1) -> EOS Finished conversion. Obtained 4 rules.P rules: f6678_0_slide93_EQ(i623:0) -> f6678_0_slide93_EQ'(i623:0) :|: i623:0 >= div1 && i623:0 - 2 * div = 1 f6678_0_slide93_EQ'(i623:0) -> f6678_0_slide93_EQ(div1) :|: i623:0 >= div1 && i623:0 - 2 * div = 1 && i623:0 - 2 * div > -2 && i623:0 - 2 * div < 2 && i623:0 - 2 * div1 > -2 && i623:0 - 2 * div1 < 2 f6678_0_slide93_EQ(i623:0) -> f6678_0_slide93_EQ'(i623:0) :|: i623:0 >= div1 && i623:0 - 2 * div = 0 f6678_0_slide93_EQ'(i623:0) -> f6678_0_slide93_EQ(div1) :|: i623:0 >= div1 && i623:0 - 2 * div = 0 && i623:0 - 2 * div > -2 && i623:0 - 2 * div < 2 && i623:0 - 2 * div1 > -2 && i623:0 - 2 * div1 < 2 ---------------------------------------- (22) Obligation: Rules: f6678_0_slide93_EQ(x) -> f6678_0_slide93_EQ'(x) :|: x >= x1 && x - 2 * x2 = 1 f6678_0_slide93_EQ'(x3) -> f6678_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 f6678_0_slide93_EQ(x6) -> f6678_0_slide93_EQ'(x6) :|: x6 >= x7 && x6 - 2 * x8 = 0 f6678_0_slide93_EQ'(x9) -> f6678_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: f6678_0_slide93_EQ(x) -> f6678_0_slide93_EQ'(x) :|: x >= x1 && x - 2 * x2 = 1 f6678_0_slide93_EQ'(x3) -> f6678_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 f6678_0_slide93_EQ(x6) -> f6678_0_slide93_EQ'(x6) :|: x6 >= x7 && x6 - 2 * x8 = 0 f6678_0_slide93_EQ'(x9) -> f6678_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) f6678_0_slide93_EQ(x) -> f6678_0_slide93_EQ'(x) :|: x >= x1 && x - 2 * x2 = 1 (2) f6678_0_slide93_EQ'(x3) -> f6678_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) f6678_0_slide93_EQ(x6) -> f6678_0_slide93_EQ'(x6) :|: x6 >= x7 && x6 - 2 * x8 = 0 (4) f6678_0_slide93_EQ'(x9) -> f6678_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) f6678_0_slide93_EQ(x) -> f6678_0_slide93_EQ'(x) :|: x >= x1 && x - 2 * x2 = 1 (2) f6678_0_slide93_EQ'(x9) -> f6678_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) f6678_0_slide93_EQ(x6) -> f6678_0_slide93_EQ'(x6) :|: x6 >= x7 && x6 - 2 * x8 = 0 (4) f6678_0_slide93_EQ'(x3) -> f6678_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: f6678_0_slide93_EQ(x6:0) -> f6678_0_slide93_EQ'(x6:0) :|: x7:0 <= x6:0 && x6:0 - 2 * x8:0 = 0 f6678_0_slide93_EQ'(x3:0) -> f6678_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 f6678_0_slide93_EQ(x:0) -> f6678_0_slide93_EQ'(x:0) :|: x:0 >= x1:0 && x:0 - 2 * x2:0 = 1 f6678_0_slide93_EQ'(x9:0) -> f6678_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: f6678_0_slide93_EQ(INTEGER) f6678_0_slide93_EQ'(INTEGER) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (30) Obligation: Rules: f6678_0_slide93_EQ(x6:0) -> f6678_0_slide93_EQ'(x6:0) :|: x7:0 <= x6:0 && x6:0 - 2 * x8:0 = 0 f6678_0_slide93_EQ'(x3:0) -> f6678_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 f6678_0_slide93_EQ(x:0) -> f6678_0_slide93_EQ'(x:0) :|: x:0 >= x1:0 && x:0 - 2 * x2:0 = 1 f6678_0_slide93_EQ'(x9:0) -> f6678_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: f6678_0_slide93_EQ'(x3:0:0) -> f6678_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 f6678_0_slide93_EQ(x6:0:0) -> f6678_0_slide93_EQ'(x6:0:0) :|: x7:0:0 <= x6:0:0 && x6:0:0 - 2 * x8:0:0 = 0 f6678_0_slide93_EQ(x:0:0) -> f6678_0_slide93_EQ'(x:0:0) :|: x:0:0 >= x1:0:0 && x:0:0 - 2 * x2:0:0 = 1 f6678_0_slide93_EQ'(x9:0:0) -> f6678_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 ---------------------------------------- (33) IntTRSPeriodicNontermProof (COMPLETE) Normalized system to the following form: 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, x6:0:0) -> f(1, x6:0:0) :|: pc = 2 && (x7:0:0 <= x6:0:0 && x6:0:0 - 2 * x8:0:0 = 0) 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, 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) Witness term starting non-terminating reduction: f(2, -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: f5823_0_slide93_EQ(EOS(STATIC_5823), i460, o1522[Kernel93.next]o1522) -> f5836_0_slide93_Load(EOS(STATIC_5836), i460, o1522[Kernel93.next]o1522) :|: TRUE f5836_0_slide93_Load(EOS(STATIC_5836), i460, o1522[Kernel93.next]o1522) -> f5852_0_slide93_Store(EOS(STATIC_5852), i460, o1522[Kernel93.next]o1522) :|: TRUE f5852_0_slide93_Store(EOS(STATIC_5852), i460, o1522[Kernel93.next]o1522) -> f5863_0_slide93_Load(EOS(STATIC_5863), i460, o1522[Kernel93.next]o1522) :|: TRUE f5863_0_slide93_Load(EOS(STATIC_5863), i460, o1522[Kernel93.next]o1522) -> f5870_0_slide93_InvokeMethod(EOS(STATIC_5870), i460, i460, o1522[Kernel93.next]o1522) :|: TRUE f5870_0_slide93_InvokeMethod(EOS(STATIC_5870), i460, i460, o1522[Kernel93.next]o1522) -> f5873_0_check_Load(EOS(STATIC_5873), i460, i460, o1522[Kernel93.next]o1522) :|: TRUE f5873_0_check_Load(EOS(STATIC_5873), i460, i460, o1522[Kernel93.next]o1522) -> f5878_0_check_ConstantStackPush(EOS(STATIC_5878), i460, i460, o1522[Kernel93.next]o1522) :|: TRUE f5878_0_check_ConstantStackPush(EOS(STATIC_5878), i460, i460, o1522[Kernel93.next]o1522) -> f5881_0_check_IntArithmetic(EOS(STATIC_5881), i460, i460, 2, o1522[Kernel93.next]o1522) :|: TRUE f5881_0_check_IntArithmetic(EOS(STATIC_5881), i460, i460, matching1, o1522[Kernel93.next]o1522) -> f5884_0_check_LE(EOS(STATIC_5884), i460, i460 % 2, o1522[Kernel93.next]o1522) :|: TRUE && matching1 = 2 f5884_0_check_LE(EOS(STATIC_5884), i460, matching1, o1522[Kernel93.next]o1522) -> f5887_0_check_LE(EOS(STATIC_5887), i460, 0, o1522[Kernel93.next]o1522) :|: TRUE && matching1 = 0 f5884_0_check_LE(EOS(STATIC_5884), i460, matching1, o1522[Kernel93.next]o1522) -> f5888_0_check_LE(EOS(STATIC_5888), i460, 1, o1522[Kernel93.next]o1522) :|: TRUE && matching1 = 1 f5887_0_check_LE(EOS(STATIC_5887), i460, matching1, o1522[Kernel93.next]o1522) -> f5891_0_check_ConstantStackPush(EOS(STATIC_5891), i460, o1522[Kernel93.next]o1522) :|: 0 <= 0 && matching1 = 0 f5891_0_check_ConstantStackPush(EOS(STATIC_5891), i460, o1522[Kernel93.next]o1522) -> f5895_0_check_Return(EOS(STATIC_5895), i460, 0, o1522[Kernel93.next]o1522) :|: TRUE f5895_0_check_Return(EOS(STATIC_5895), i460, matching1, o1522[Kernel93.next]o1522) -> f5899_0_slide93_EQ(EOS(STATIC_5899), i460, 0, o1522[Kernel93.next]o1522) :|: TRUE && matching1 = 0 f5899_0_slide93_EQ(EOS(STATIC_5899), i460, matching1, o1522[Kernel93.next]o1522) -> f5904_0_slide93_Load(EOS(STATIC_5904), i460, o1522[Kernel93.next]o1522) :|: TRUE && matching1 = 0 f5904_0_slide93_Load(EOS(STATIC_5904), i460, o1522[Kernel93.next]o1522) -> f5932_0_slide93_Store(EOS(STATIC_5932), i460, o1522[Kernel93.next]o1522) :|: TRUE f5932_0_slide93_Store(EOS(STATIC_5932), i460, o1522[Kernel93.next]o1522) -> f5942_0_slide93_Load(EOS(STATIC_5942), i460, o1522[Kernel93.next]o1522) :|: TRUE f5942_0_slide93_Load(EOS(STATIC_5942), i460, o1522[Kernel93.next]o1522) -> f5969_0_slide93_FieldAccess(EOS(STATIC_5969), i460, o1522[Kernel93.next]o1522) :|: TRUE f5969_0_slide93_FieldAccess(EOS(STATIC_5969), i460, o1721[Kernel93.next]o1721) -> f5977_0_slide93_FieldAccess(EOS(STATIC_5977), i460, o1722[Kernel93.next]o1721) :|: o1722[Kernel93.next]o1721 < o1721[Kernel93.next]o1721 && o1721[Kernel93.next]o1721 >= 0 f5977_0_slide93_FieldAccess(EOS(STATIC_5977), i460, o1722[Kernel93.next]o1721) -> f6016_0_slide93_FieldAccess(EOS(STATIC_6016), i460, o1722[Kernel93.next]o1721) :|: o1722[Kernel93.next]o1721 > 0 f6016_0_slide93_FieldAccess(EOS(STATIC_6016), i460, o1722[Kernel93.next]o1721) -> f6024_0_slide93_Store(EOS(STATIC_6024), i460, o1722[Kernel93.next]o1721) :|: TRUE f6024_0_slide93_Store(EOS(STATIC_6024), i460, o1722[Kernel93.next]o1721) -> f6028_0_slide93_Load(EOS(STATIC_6028), i460, o1722[Kernel93.next]o1721) :|: TRUE f6028_0_slide93_Load(EOS(STATIC_6028), i460, o1722[Kernel93.next]o1721) -> f6032_0_slide93_ConstantStackPush(EOS(STATIC_6032), i460, o1722[Kernel93.next]o1721) :|: TRUE f6032_0_slide93_ConstantStackPush(EOS(STATIC_6032), i460, o1722[Kernel93.next]o1721) -> f6036_0_slide93_IntArithmetic(EOS(STATIC_6036), i460, 2, o1722[Kernel93.next]o1721) :|: TRUE f6036_0_slide93_IntArithmetic(EOS(STATIC_6036), i460, matching1, o1722[Kernel93.next]o1721) -> f6089_0_slide93_Store(EOS(STATIC_6089), i534, o1722[Kernel93.next]o1721) :|: i534 = i460 / 2 && i534 <= i460 && matching1 = 2 f6089_0_slide93_Store(EOS(STATIC_6089), i534, o1722[Kernel93.next]o1721) -> f6143_0_slide93_JMP(EOS(STATIC_6143), i534, o1722[Kernel93.next]o1721) :|: TRUE f6143_0_slide93_JMP(EOS(STATIC_6143), i534, o1722[Kernel93.next]o1721) -> f6180_0_slide93_Load(EOS(STATIC_6180), i534, o1722[Kernel93.next]o1721) :|: TRUE f6180_0_slide93_Load(EOS(STATIC_6180), i534, o1722[Kernel93.next]o1721) -> f5776_0_slide93_Load(EOS(STATIC_5776), i534, o1722[Kernel93.next]o1722) :|: TRUE f5776_0_slide93_Load(EOS(STATIC_5776), i460, o1522[Kernel93.next]o1522) -> f5785_0_slide93_Load(EOS(STATIC_5785), i460, o1522[Kernel93.next]o1522) :|: TRUE f5785_0_slide93_Load(EOS(STATIC_5785), i460, o1522[Kernel93.next]o1522) -> f5801_0_slide93_EQ(EOS(STATIC_5801), i460, o1522[Kernel93.next]o1522) :|: TRUE f5801_0_slide93_EQ(EOS(STATIC_5801), i460, o1522[Kernel93.next]o1522) -> f5823_0_slide93_EQ(EOS(STATIC_5823), i460, o1522[Kernel93.next]o1522) :|: o1522[Kernel93.next]o1522 > 0 f5888_0_check_LE(EOS(STATIC_5888), i460, matching1, o1522[Kernel93.next]o1522) -> f5892_0_check_ConstantStackPush(EOS(STATIC_5892), i460, o1522[Kernel93.next]o1522) :|: 1 > 0 && matching1 = 1 f5892_0_check_ConstantStackPush(EOS(STATIC_5892), i460, o1522[Kernel93.next]o1522) -> f5896_0_check_JMP(EOS(STATIC_5896), i460, 1, o1522[Kernel93.next]o1522) :|: TRUE f5896_0_check_JMP(EOS(STATIC_5896), i460, matching1, o1522[Kernel93.next]o1522) -> f5900_0_check_Return(EOS(STATIC_5900), i460, 1, o1522[Kernel93.next]o1522) :|: TRUE && matching1 = 1 f5900_0_check_Return(EOS(STATIC_5900), i460, matching1, o1522[Kernel93.next]o1522) -> f5913_0_slide93_EQ(EOS(STATIC_5913), i460, 1, o1522[Kernel93.next]o1522) :|: TRUE && matching1 = 1 f5913_0_slide93_EQ(EOS(STATIC_5913), i460, matching1, o1522[Kernel93.next]o1522) -> f5938_0_slide93_Load(EOS(STATIC_5938), i460, o1522[Kernel93.next]o1522) :|: 1 > 0 && matching1 = 1 f5938_0_slide93_Load(EOS(STATIC_5938), i460, o1522[Kernel93.next]o1522) -> f5958_0_slide93_FieldAccess(EOS(STATIC_5958), i460, o1522[Kernel93.next]o1522) :|: TRUE f5958_0_slide93_FieldAccess(EOS(STATIC_5958), i460, o1719[Kernel93.next]o1719) -> f5974_0_slide93_FieldAccess(EOS(STATIC_5974), i460, o1720[Kernel93.next]o1719) :|: o1720[Kernel93.next]o1719 < o1719[Kernel93.next]o1719 && o1719[Kernel93.next]o1719 >= 0 f5974_0_slide93_FieldAccess(EOS(STATIC_5974), i460, o1720[Kernel93.next]o1719) -> f5997_0_slide93_FieldAccess(EOS(STATIC_5997), i460, o1720[Kernel93.next]o1719) :|: o1720[Kernel93.next]o1719 > 0 f5997_0_slide93_FieldAccess(EOS(STATIC_5997), i460, o1720[Kernel93.next]o1719) -> f6022_0_slide93_Store(EOS(STATIC_6022), i460, o1720[Kernel93.next]o1719) :|: TRUE f6022_0_slide93_Store(EOS(STATIC_6022), i460, o1720[Kernel93.next]o1719) -> f6026_0_slide93_Load(EOS(STATIC_6026), i460, o1720[Kernel93.next]o1719) :|: TRUE f6026_0_slide93_Load(EOS(STATIC_6026), i460, o1720[Kernel93.next]o1719) -> f6030_0_slide93_Load(EOS(STATIC_6030), i460, o1720[Kernel93.next]o1719) :|: TRUE f6030_0_slide93_Load(EOS(STATIC_6030), i460, o1720[Kernel93.next]o1719) -> f6034_0_slide93_FieldAccess(EOS(STATIC_6034), i460, o1720[Kernel93.next]o1719) :|: TRUE f6034_0_slide93_FieldAccess(EOS(STATIC_6034), i460, o1720[Kernel93.next]o1719) -> f6064_0_slide93_FieldAccess(EOS(STATIC_6064), i460, o1720[Kernel93.next]o1719) :|: TRUE f6064_0_slide93_FieldAccess(EOS(STATIC_6064), i460, o1720[Kernel93.next]o1719) -> f6133_0_slide93_Load(EOS(STATIC_6133), i460) :|: TRUE f6133_0_slide93_Load(EOS(STATIC_6133), i460) -> f6145_0_slide93_Load(EOS(STATIC_6145), i460) :|: TRUE f6145_0_slide93_Load(EOS(STATIC_6145), i460) -> f6249_0_slide93_FieldAccess(EOS(STATIC_6249), i460) :|: TRUE f6249_0_slide93_FieldAccess(EOS(STATIC_6249), i460) -> f6278_0_slide93_JMP(EOS(STATIC_6278), i460) :|: TRUE f6278_0_slide93_JMP(EOS(STATIC_6278), i460) -> f6322_0_slide93_Load(EOS(STATIC_6322), i460) :|: TRUE f6322_0_slide93_Load(EOS(STATIC_6322), i460) -> f6357_0_slide93_FieldAccess(EOS(STATIC_6357), i460) :|: TRUE f6357_0_slide93_FieldAccess(EOS(STATIC_6357), i460) -> f6389_0_slide93_Store(EOS(STATIC_6389), i460) :|: TRUE f6389_0_slide93_Store(EOS(STATIC_6389), i460) -> f6417_0_slide93_Load(EOS(STATIC_6417), i460) :|: TRUE f6417_0_slide93_Load(EOS(STATIC_6417), i460) -> f6445_0_slide93_ConstantStackPush(EOS(STATIC_6445), i460) :|: TRUE f6445_0_slide93_ConstantStackPush(EOS(STATIC_6445), i460) -> f6476_0_slide93_IntArithmetic(EOS(STATIC_6476), i460, 2) :|: TRUE f6476_0_slide93_IntArithmetic(EOS(STATIC_6476), i460, matching1) -> f6501_0_slide93_Store(EOS(STATIC_6501), i592) :|: i592 = i460 / 2 && i592 <= i460 && matching1 = 2 f6501_0_slide93_Store(EOS(STATIC_6501), i592) -> f6536_0_slide93_JMP(EOS(STATIC_6536), i592) :|: TRUE f6536_0_slide93_JMP(EOS(STATIC_6536), i592) -> f6584_0_slide93_Load(EOS(STATIC_6584), i592) :|: TRUE f6584_0_slide93_Load(EOS(STATIC_6584), i592) -> f5776_0_slide93_Load(EOS(STATIC_5776), i592, o1719[Kernel93.next]o1719) :|: o1719[Kernel93.next]o1719 = 1 Combined rules. Obtained 4 IRulesP rules: f5823_0_slide93_EQ(EOS(STATIC_5823), i460:0, o1522[Kernel93.next]o1522:0) -> f5823_0_slide93_EQ'(EOS(STATIC_5823), i460:0, o1522[Kernel93.next]o1522:0) :|: i460:0 - 2 * div = 1 && o1522[Kernel93.next]o1522:0 > -1 && o1720[Kernel93.next]o1719:0 < o1522[Kernel93.next]o1522:0 && i460:0 >= div1 && o1720[Kernel93.next]o1719:0 > 0 f5823_0_slide93_EQ'(EOS(STATIC_5823), i460:0, o1522[Kernel93.next]o1522:0) -> f5823_0_slide93_EQ(EOS(STATIC_5823), div1, 1) :|: i460:0 - 2 * div = 1 && o1522[Kernel93.next]o1522:0 > -1 && o1720[Kernel93.next]o1719:0 < o1522[Kernel93.next]o1522:0 && o1720[Kernel93.next]o1719:0 > 0 && i460:0 >= div1 && i460:0 - 2 * div > -2 && i460:0 - 2 * div < 2 && i460:0 - 2 * div1 < 2 && i460:0 - 2 * div1 > -2 f5823_0_slide93_EQ(EOS(STATIC_5823), i460:0, o1522[Kernel93.next]o1522:0) -> f5823_0_slide93_EQ'(EOS(STATIC_5823), i460:0, o1522[Kernel93.next]o1522:0) :|: i460:0 - 2 * div = 0 && o1522[Kernel93.next]o1522:0 > -1 && o1722[Kernel93.next]o1721:0 < o1522[Kernel93.next]o1522:0 && o1722[Kernel93.next]o1721:0 > 0 && o1722[Kernel93.next]o1722:0 > 0 && i460:0 >= div1 f5823_0_slide93_EQ'(EOS(STATIC_5823), i460:0, o1522[Kernel93.next]o1522:0) -> f5823_0_slide93_EQ(EOS(STATIC_5823), div1, o1722[Kernel93.next]o1722:0) :|: i460:0 - 2 * div = 0 && o1522[Kernel93.next]o1522:0 > -1 && o1722[Kernel93.next]o1721:0 < o1522[Kernel93.next]o1522:0 && o1722[Kernel93.next]o1721:0 > 0 && i460:0 >= div1 && o1722[Kernel93.next]o1722:0 > 0 && i460:0 - 2 * div > -2 && i460:0 - 2 * div < 2 && i460:0 - 2 * div1 < 2 && i460:0 - 2 * div1 > -2 Filtered constant ground arguments: f5823_0_slide93_EQ(x1, x2, x3) -> f5823_0_slide93_EQ(x2, x3) f5823_0_slide93_EQ'(x1, x2, x3) -> f5823_0_slide93_EQ'(x2, x3) EOS(x1) -> EOS Finished conversion. Obtained 4 rules.P rules: f5823_0_slide93_EQ(i460:0, o1522[Kernel93.next]o1522:0) -> f5823_0_slide93_EQ'(i460:0, o1522[Kernel93.next]o1522:0) :|: o1522[Kernel93.next]o1522:0 > -1 && i460:0 - 2 * div = 1 && o1720[Kernel93.next]o1719:0 < o1522[Kernel93.next]o1522:0 && o1720[Kernel93.next]o1719:0 > 0 && i460:0 >= div1 f5823_0_slide93_EQ'(i460:0, o1522[Kernel93.next]o1522:0) -> f5823_0_slide93_EQ(div1, 1) :|: o1522[Kernel93.next]o1522:0 > -1 && i460:0 - 2 * div = 1 && o1720[Kernel93.next]o1719:0 < o1522[Kernel93.next]o1522:0 && o1720[Kernel93.next]o1719:0 > 0 && i460:0 >= div1 && i460:0 - 2 * div > -2 && i460:0 - 2 * div < 2 && i460:0 - 2 * div1 > -2 && i460:0 - 2 * div1 < 2 f5823_0_slide93_EQ(i460:0, o1522[Kernel93.next]o1522:0) -> f5823_0_slide93_EQ'(i460:0, o1522[Kernel93.next]o1522:0) :|: o1522[Kernel93.next]o1522:0 > -1 && i460:0 - 2 * div = 0 && o1722[Kernel93.next]o1721:0 < o1522[Kernel93.next]o1522:0 && o1722[Kernel93.next]o1721:0 > 0 && i460:0 >= div1 && o1722[Kernel93.next]o1722:0 > 0 f5823_0_slide93_EQ'(i460:0, o1522[Kernel93.next]o1522:0) -> f5823_0_slide93_EQ(div1, o1722[Kernel93.next]o1722:0) :|: o1522[Kernel93.next]o1522:0 > -1 && i460:0 - 2 * div = 0 && o1722[Kernel93.next]o1721:0 < o1522[Kernel93.next]o1522:0 && o1722[Kernel93.next]o1721:0 > 0 && i460:0 >= div1 && o1722[Kernel93.next]o1722:0 > 0 && i460:0 - 2 * div > -2 && i460:0 - 2 * div < 2 && i460:0 - 2 * div1 > -2 && i460:0 - 2 * div1 < 2 ---------------------------------------- (37) Obligation: Rules: f5823_0_slide93_EQ(x, x1) -> f5823_0_slide93_EQ'(x, x1) :|: x1 > -1 && x - 2 * x2 = 1 && x3 < x1 && x3 > 0 && x >= x4 f5823_0_slide93_EQ'(x5, x6) -> f5823_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 f5823_0_slide93_EQ(x10, x11) -> f5823_0_slide93_EQ'(x10, x11) :|: x11 > -1 && x10 - 2 * x12 = 0 && x13 < x11 && x13 > 0 && x10 >= x14 && x15 > 0 f5823_0_slide93_EQ'(x16, x17) -> f5823_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: f5823_0_slide93_EQ(x, x1) -> f5823_0_slide93_EQ'(x, x1) :|: x1 > -1 && x - 2 * x2 = 1 && x3 < x1 && x3 > 0 && x >= x4 f5823_0_slide93_EQ'(x5, x6) -> f5823_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 f5823_0_slide93_EQ(x10, x11) -> f5823_0_slide93_EQ'(x10, x11) :|: x11 > -1 && x10 - 2 * x12 = 0 && x13 < x11 && x13 > 0 && x10 >= x14 && x15 > 0 f5823_0_slide93_EQ'(x16, x17) -> f5823_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) f5823_0_slide93_EQ(x, x1) -> f5823_0_slide93_EQ'(x, x1) :|: x1 > -1 && x - 2 * x2 = 1 && x3 < x1 && x3 > 0 && x >= x4 (2) f5823_0_slide93_EQ'(x5, x6) -> f5823_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) f5823_0_slide93_EQ(x10, x11) -> f5823_0_slide93_EQ'(x10, x11) :|: x11 > -1 && x10 - 2 * x12 = 0 && x13 < x11 && x13 > 0 && x10 >= x14 && x15 > 0 (4) f5823_0_slide93_EQ'(x16, x17) -> f5823_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) f5823_0_slide93_EQ(x10, x11) -> f5823_0_slide93_EQ'(x10, x11) :|: x11 > -1 && x10 - 2 * x12 = 0 && x13 < x11 && x13 > 0 && x10 >= x14 && x15 > 0 (2) f5823_0_slide93_EQ'(x16, x17) -> f5823_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: f5823_0_slide93_EQ(x10:0, x11:0) -> f5823_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: f5823_0_slide93_EQ(INTEGER, INTEGER) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (45) Obligation: Rules: f5823_0_slide93_EQ(x10:0, x11:0) -> f5823_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: f5823_0_slide93_EQ(x10:0:0, x11:0:0) -> f5823_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