8.71/3.27 YES 8.71/3.28 proof of /export/starexec/sandbox/benchmark/theBenchmark.jar 8.71/3.28 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 8.71/3.28 8.71/3.28 8.71/3.28 termination of the given Bare JBC problem could be proven: 8.71/3.28 8.71/3.28 (0) Bare JBC problem 8.71/3.28 (1) BareJBCToJBCProof [EQUIVALENT, 95 ms] 8.71/3.28 (2) JBC problem 8.71/3.28 (3) JBCToGraph [EQUIVALENT, 427 ms] 8.71/3.28 (4) JBCTerminationGraph 8.71/3.28 (5) TerminationGraphToSCCProof [SOUND, 0 ms] 8.71/3.28 (6) AND 8.71/3.28 (7) JBCTerminationSCC 8.71/3.28 (8) SCCToIRSProof [SOUND, 143 ms] 8.71/3.28 (9) IRSwT 8.71/3.28 (10) IRSFormatTransformerProof [EQUIVALENT, 0 ms] 8.71/3.28 (11) IRSwT 8.71/3.28 (12) IRSwTTerminationDigraphProof [EQUIVALENT, 0 ms] 8.71/3.28 (13) IRSwT 8.71/3.28 (14) TempFilterProof [SOUND, 23 ms] 8.71/3.28 (15) IRSwT 8.71/3.28 (16) IRSwTToQDPProof [SOUND, 0 ms] 8.71/3.28 (17) QDP 8.71/3.28 (18) QDPSizeChangeProof [EQUIVALENT, 0 ms] 8.71/3.28 (19) YES 8.71/3.28 (20) JBCTerminationSCC 8.71/3.28 (21) SCCToIRSProof [SOUND, 30 ms] 8.71/3.28 (22) IRSwT 8.71/3.28 (23) IRSFormatTransformerProof [EQUIVALENT, 0 ms] 8.71/3.28 (24) IRSwT 8.71/3.28 (25) IRSwTTerminationDigraphProof [EQUIVALENT, 20 ms] 8.71/3.28 (26) IRSwT 8.71/3.28 (27) IntTRSCompressionProof [EQUIVALENT, 0 ms] 8.71/3.28 (28) IRSwT 8.71/3.28 (29) FilterProof [EQUIVALENT, 0 ms] 8.71/3.28 (30) IntTRS 8.71/3.28 (31) IntTRSCompressionProof [EQUIVALENT, 0 ms] 8.71/3.28 (32) IntTRS 8.71/3.28 (33) PolynomialOrderProcessor [EQUIVALENT, 7 ms] 8.71/3.28 (34) YES 8.71/3.28 (35) JBCTerminationSCC 8.71/3.28 (36) SCCToIRSProof [SOUND, 14 ms] 8.71/3.28 (37) IRSwT 8.71/3.28 (38) IRSFormatTransformerProof [EQUIVALENT, 0 ms] 8.71/3.28 (39) IRSwT 8.71/3.28 (40) IRSwTTerminationDigraphProof [EQUIVALENT, 11 ms] 8.71/3.28 (41) IRSwT 8.71/3.28 (42) IntTRSCompressionProof [EQUIVALENT, 0 ms] 8.71/3.28 (43) IRSwT 8.71/3.28 (44) TempFilterProof [SOUND, 12 ms] 8.71/3.28 (45) IntTRS 8.71/3.28 (46) PolynomialOrderProcessor [EQUIVALENT, 0 ms] 8.71/3.28 (47) YES 8.71/3.28 8.71/3.28 8.71/3.28 ---------------------------------------- 8.71/3.28 8.71/3.28 (0) 8.71/3.28 Obligation: 8.71/3.28 need to prove termination of the following program: 8.71/3.28 public class ListReverseCyclicList { 8.71/3.28 public static void main(String... args) { 8.71/3.28 List x = List.createCycle(args[0].length()); 8.71/3.28 List.reverse(x); 8.71/3.28 } 8.71/3.28 } 8.71/3.28 8.71/3.28 class List { 8.71/3.28 List n; 8.71/3.28 8.71/3.28 public List(List next) { 8.71/3.28 this.n = next; 8.71/3.28 } 8.71/3.28 8.71/3.28 public static void reverse(List x) { 8.71/3.28 List y = null; 8.71/3.28 while (x != null) { 8.71/3.28 List z = x; 8.71/3.28 x = x.n; 8.71/3.28 z.n = y; 8.71/3.28 y = z; 8.71/3.28 } 8.71/3.28 } 8.71/3.28 8.71/3.28 public static List createList(int l, List end) { 8.71/3.28 while (--l > 0) { 8.71/3.28 end = new List(end); 8.71/3.28 } 8.71/3.28 return end; 8.71/3.28 } 8.71/3.28 8.71/3.28 public static List createCycle(int l) { 8.71/3.28 List last = new List(null); 8.71/3.28 List first = createList(l - 1, last); 8.71/3.28 last.n = first; 8.71/3.28 return first; 8.71/3.28 } 8.71/3.28 8.71/3.28 public static List createPanhandleList(int pl, int cl) { 8.71/3.28 return createList(pl, createCycle(cl)); 8.71/3.28 } 8.71/3.28 8.71/3.28 } 8.71/3.28 8.71/3.28 8.71/3.28 8.71/3.28 ---------------------------------------- 8.71/3.28 8.71/3.28 (1) BareJBCToJBCProof (EQUIVALENT) 8.71/3.28 initialized classpath 8.71/3.28 ---------------------------------------- 8.71/3.28 8.71/3.28 (2) 8.71/3.28 Obligation: 8.71/3.28 need to prove termination of the following program: 8.71/3.28 public class ListReverseCyclicList { 8.71/3.28 public static void main(String... args) { 8.71/3.28 List x = List.createCycle(args[0].length()); 8.71/3.28 List.reverse(x); 8.71/3.28 } 8.71/3.28 } 8.71/3.28 8.71/3.28 class List { 8.71/3.28 List n; 8.71/3.28 8.71/3.28 public List(List next) { 8.71/3.28 this.n = next; 8.71/3.28 } 8.71/3.28 8.71/3.28 public static void reverse(List x) { 8.71/3.28 List y = null; 8.71/3.28 while (x != null) { 8.71/3.28 List z = x; 8.71/3.28 x = x.n; 8.71/3.28 z.n = y; 8.71/3.28 y = z; 8.71/3.28 } 8.71/3.28 } 8.71/3.28 8.71/3.28 public static List createList(int l, List end) { 8.71/3.28 while (--l > 0) { 8.71/3.28 end = new List(end); 8.71/3.28 } 8.71/3.28 return end; 8.71/3.28 } 8.71/3.28 8.71/3.28 public static List createCycle(int l) { 8.71/3.28 List last = new List(null); 8.71/3.28 List first = createList(l - 1, last); 8.71/3.28 last.n = first; 8.71/3.28 return first; 8.71/3.28 } 8.71/3.28 8.71/3.28 public static List createPanhandleList(int pl, int cl) { 8.71/3.28 return createList(pl, createCycle(cl)); 8.71/3.28 } 8.71/3.28 8.71/3.28 } 8.71/3.28 8.71/3.28 8.71/3.28 8.71/3.28 ---------------------------------------- 8.71/3.28 8.71/3.28 (3) JBCToGraph (EQUIVALENT) 8.71/3.28 Constructed TerminationGraph. 8.71/3.28 ---------------------------------------- 8.71/3.28 8.71/3.28 (4) 8.71/3.28 Obligation: 8.71/3.28 Termination Graph based on JBC Program: 8.71/3.28 ListReverseCyclicList.main([Ljava/lang/String;)V: Graph of 261 nodes with 3 SCCs. 8.71/3.28 8.71/3.28 8.71/3.28 8.71/3.28 8.71/3.28 8.71/3.28 ---------------------------------------- 8.71/3.28 8.71/3.28 (5) TerminationGraphToSCCProof (SOUND) 8.71/3.28 Splitted TerminationGraph to 3 SCCss. 8.71/3.28 ---------------------------------------- 8.71/3.28 8.71/3.28 (6) 8.71/3.28 Complex Obligation (AND) 8.71/3.28 8.71/3.28 ---------------------------------------- 8.71/3.28 8.71/3.28 (7) 8.71/3.28 Obligation: 8.71/3.28 SCC of termination graph based on JBC Program. 8.71/3.28 SCC contains nodes from the following methods: ListReverseCyclicList.main([Ljava/lang/String;)V 8.71/3.28 SCC calls the following helper methods: 8.71/3.28 Performed SCC analyses: 8.71/3.28 *Used field analysis yielded the following read fields: 8.71/3.28 *List: [n] 8.71/3.28 *Marker field analysis yielded the following relations that could be markers: 8.71/3.28 8.71/3.28 ---------------------------------------- 8.71/3.28 8.71/3.28 (8) SCCToIRSProof (SOUND) 8.71/3.28 Transformed FIGraph SCCs to intTRSs. Log: 8.71/3.28 Generated rules. Obtained 16 IRulesP rules: 8.71/3.28 f1730_0_reverse_NULL(EOS(STATIC_1730), java.lang.Object(o999sub), java.lang.Object(List(EOC, o920137817343)), java.lang.Object(o999sub)) -> f1751_0_reverse_Load(EOS(STATIC_1751), java.lang.Object(o999sub), java.lang.Object(List(EOC, o920137817343))) :|: TRUE 8.71/3.28 f1751_0_reverse_Load(EOS(STATIC_1751), java.lang.Object(o999sub), java.lang.Object(List(EOC, o920137817343))) -> f1781_0_reverse_Store(EOS(STATIC_1781), java.lang.Object(o999sub), java.lang.Object(List(EOC, o920137817343)), java.lang.Object(o999sub)) :|: TRUE 8.71/3.28 f1781_0_reverse_Store(EOS(STATIC_1781), java.lang.Object(List(EOC, o1079)), java.lang.Object(List(EOC, o920137817343)), java.lang.Object(List(EOC, o1079))) -> f1796_0_reverse_Store(EOS(STATIC_1796), java.lang.Object(List(EOC, o1079)), java.lang.Object(List(EOC, o920137817343)), java.lang.Object(List(EOC, o1079))) :|: TRUE 8.71/3.28 f1796_0_reverse_Store(EOS(STATIC_1796), java.lang.Object(List(EOC, o1079)), java.lang.Object(List(EOC, o920137817343)), java.lang.Object(List(EOC, o1079))) -> f1885_0_reverse_Load(EOS(STATIC_1885), java.lang.Object(List(EOC, o1079)), java.lang.Object(List(EOC, o920137817343)), java.lang.Object(List(EOC, o1079))) :|: TRUE 8.71/3.28 f1885_0_reverse_Load(EOS(STATIC_1885), java.lang.Object(List(EOC, o1079)), java.lang.Object(List(EOC, o920137817343)), java.lang.Object(List(EOC, o1079))) -> f1900_0_reverse_FieldAccess(EOS(STATIC_1900), java.lang.Object(List(EOC, o920137817343)), java.lang.Object(List(EOC, o1079)), java.lang.Object(List(EOC, o1079))) :|: TRUE 8.71/3.28 f1900_0_reverse_FieldAccess(EOS(STATIC_1900), java.lang.Object(List(EOC, o920137817343)), java.lang.Object(List(EOC, o1079)), java.lang.Object(List(EOC, o1079))) -> f1925_0_reverse_Store(EOS(STATIC_1925), java.lang.Object(List(EOC, o920137817343)), java.lang.Object(List(EOC, o1079)), o1079) :|: TRUE 8.71/3.28 f1925_0_reverse_Store(EOS(STATIC_1925), java.lang.Object(List(EOC, o920137817343)), java.lang.Object(List(EOC, o1079)), o1079) -> f1946_0_reverse_Load(EOS(STATIC_1946), o1079, java.lang.Object(List(EOC, o920137817343)), java.lang.Object(List(EOC, o1079))) :|: TRUE 8.71/3.28 f1946_0_reverse_Load(EOS(STATIC_1946), o1079, java.lang.Object(List(EOC, o920137817343)), java.lang.Object(List(EOC, o1079))) -> f2016_0_reverse_Load(EOS(STATIC_2016), o1079, java.lang.Object(List(EOC, o920137817343)), java.lang.Object(List(EOC, o1079)), java.lang.Object(List(EOC, o1079))) :|: TRUE 8.71/3.28 f2016_0_reverse_Load(EOS(STATIC_2016), o1079, java.lang.Object(List(EOC, o920137817343)), java.lang.Object(List(EOC, o1079)), java.lang.Object(List(EOC, o1079))) -> f2109_0_reverse_FieldAccess(EOS(STATIC_2109), o1079, java.lang.Object(List(EOC, o1079)), java.lang.Object(List(EOC, o1079)), java.lang.Object(List(EOC, o920137817343))) :|: TRUE 8.71/3.28 f2109_0_reverse_FieldAccess(EOS(STATIC_2109), o1079, java.lang.Object(List(EOC, o1079)), java.lang.Object(List(EOC, o1079)), java.lang.Object(List(EOC, o920137817343))) -> f2146_0_reverse_Load(EOS(STATIC_2146), o1079, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o920put-899017535))))) :|: TRUE 8.71/3.28 f2146_0_reverse_Load(EOS(STATIC_2146), o1079, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o920-899017535))))) -> f2170_0_reverse_Store(EOS(STATIC_2170), o1079, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o920-899017535))))) :|: TRUE 8.71/3.28 f2170_0_reverse_Store(EOS(STATIC_2170), o1079, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o920-899017535))))) -> f2256_0_reverse_JMP(EOS(STATIC_2256), o1079, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o920-899017535))))) :|: TRUE 8.71/3.28 f2256_0_reverse_JMP(EOS(STATIC_2256), o1079, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o920-899017535))))) -> f2370_0_reverse_Load(EOS(STATIC_2370), o1079, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o920-899017535))))) :|: TRUE 8.71/3.28 f2370_0_reverse_Load(EOS(STATIC_2370), o1079, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o920-899017535))))) -> f1626_0_reverse_Load(EOS(STATIC_1626), o1079, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o920-899017535))))) :|: TRUE 8.71/3.28 f1626_0_reverse_Load(EOS(STATIC_1626), o918, java.lang.Object(List(EOC, o920137817343))) -> f1713_0_reverse_NULL(EOS(STATIC_1713), o918, java.lang.Object(List(EOC, o920137817343)), o918) :|: TRUE 8.71/3.28 f1713_0_reverse_NULL(EOS(STATIC_1713), java.lang.Object(o999sub), java.lang.Object(List(EOC, o920137817343)), java.lang.Object(o999sub)) -> f1730_0_reverse_NULL(EOS(STATIC_1730), java.lang.Object(o999sub), java.lang.Object(List(EOC, o920137817343)), java.lang.Object(o999sub)) :|: TRUE 8.71/3.28 Combined rules. Obtained 1 IRulesP rules: 8.71/3.28 f1730_0_reverse_NULL(EOS(STATIC_1730), java.lang.Object(List(EOC, java.lang.Object(o999sub:0))), java.lang.Object(List(EOC, o920137817343:0)), java.lang.Object(List(EOC, java.lang.Object(o999sub:0)))) -> f1730_0_reverse_NULL(EOS(STATIC_1730), java.lang.Object(o999sub:0), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o920put-899017535:0)))), java.lang.Object(o999sub:0)) :|: TRUE 8.71/3.28 Filtered constant ground arguments: 8.71/3.28 f1730_0_reverse_NULL(x1, x2, x3, x4) -> f1730_0_reverse_NULL(x2, x3, x4) 8.71/3.28 EOS(x1) -> EOS 8.71/3.28 List(x1, x2) -> List(x2) 8.71/3.28 Filtered duplicate arguments: 8.71/3.28 f1730_0_reverse_NULL(x1, x2, x3) -> f1730_0_reverse_NULL(x2, x3) 8.71/3.28 Finished conversion. Obtained 1 rules.P rules: 8.71/3.28 f1730_0_reverse_NULL(java.lang.Object(List(o920137817343:0)), java.lang.Object(List(java.lang.Object(o999sub:0)))) -> f1730_0_reverse_NULL(java.lang.Object(List(java.lang.Object(List(o920put-899017535:0)))), java.lang.Object(o999sub:0)) :|: TRUE 8.71/3.28 8.71/3.28 ---------------------------------------- 8.71/3.28 8.71/3.28 (9) 8.71/3.28 Obligation: 8.71/3.28 Rules: 8.71/3.28 f1730_0_reverse_NULL(java.lang.Object(List(o920137817343:0)), java.lang.Object(List(java.lang.Object(o999sub:0)))) -> f1730_0_reverse_NULL(java.lang.Object(List(java.lang.Object(List(o920put-899017535:0)))), java.lang.Object(o999sub:0)) :|: TRUE 8.71/3.28 8.71/3.28 ---------------------------------------- 8.71/3.28 8.71/3.28 (10) IRSFormatTransformerProof (EQUIVALENT) 8.71/3.28 Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). 8.71/3.28 ---------------------------------------- 8.71/3.28 8.71/3.28 (11) 8.71/3.28 Obligation: 8.71/3.28 Rules: 8.71/3.28 f1730_0_reverse_NULL(java.lang.Object(List(o920137817343:0)), java.lang.Object(List(java.lang.Object(o999sub:0)))) -> f1730_0_reverse_NULL(java.lang.Object(List(java.lang.Object(List(o920put-899017535:0)))), java.lang.Object(o999sub:0)) :|: TRUE 8.71/3.28 8.71/3.28 ---------------------------------------- 8.71/3.28 8.71/3.28 (12) IRSwTTerminationDigraphProof (EQUIVALENT) 8.71/3.28 Constructed termination digraph! 8.71/3.28 Nodes: 8.71/3.28 (1) f1730_0_reverse_NULL(java.lang.Object(List(o920137817343:0)), java.lang.Object(List(java.lang.Object(o999sub:0)))) -> f1730_0_reverse_NULL(java.lang.Object(List(java.lang.Object(List(o920put-899017535:0)))), java.lang.Object(o999sub:0)) :|: TRUE 8.71/3.28 8.71/3.28 Arcs: 8.71/3.28 (1) -> (1) 8.71/3.28 8.71/3.28 This digraph is fully evaluated! 8.71/3.28 ---------------------------------------- 8.71/3.28 8.71/3.28 (13) 8.71/3.28 Obligation: 8.71/3.28 8.71/3.28 Termination digraph: 8.71/3.28 Nodes: 8.71/3.28 (1) f1730_0_reverse_NULL(java.lang.Object(List(o920137817343:0)), java.lang.Object(List(java.lang.Object(o999sub:0)))) -> f1730_0_reverse_NULL(java.lang.Object(List(java.lang.Object(List(o920put-899017535:0)))), java.lang.Object(o999sub:0)) :|: TRUE 8.71/3.28 8.71/3.28 Arcs: 8.71/3.28 (1) -> (1) 8.71/3.28 8.71/3.28 This digraph is fully evaluated! 8.71/3.28 8.71/3.28 ---------------------------------------- 8.71/3.28 8.71/3.28 (14) TempFilterProof (SOUND) 8.71/3.28 Used the following sort dictionary for filtering: 8.71/3.28 f1730_0_reverse_NULL(VARIABLE, VARIABLE) 8.71/3.28 java.lang.Object(VARIABLE) 8.71/3.28 List(VARIABLE) 8.71/3.28 Removed predefined arithmetic. 8.71/3.28 ---------------------------------------- 8.71/3.28 8.71/3.28 (15) 8.71/3.28 Obligation: 8.71/3.28 Rules: 8.71/3.28 f1730_0_reverse_NULL(java.lang.Object(List(java.lang.Object(o999sub:0)))) -> f1730_0_reverse_NULL(java.lang.Object(o999sub:0)) :|: TRUE 8.71/3.28 8.71/3.28 ---------------------------------------- 8.71/3.28 8.71/3.28 (16) IRSwTToQDPProof (SOUND) 8.71/3.28 Removed the integers and created a QDP-Problem. 8.71/3.28 ---------------------------------------- 8.71/3.28 8.71/3.28 (17) 8.71/3.28 Obligation: 8.71/3.28 Q DP problem: 8.71/3.28 The TRS P consists of the following rules: 8.71/3.28 8.71/3.28 f1730_0_reverse_NULL(java.lang.Object(List(java.lang.Object(o999sub:0)))) -> f1730_0_reverse_NULL(java.lang.Object(o999sub:0)) 8.71/3.28 8.71/3.28 R is empty. 8.71/3.28 Q is empty. 8.71/3.28 We have to consider all (P,Q,R)-chains. 8.71/3.28 ---------------------------------------- 8.71/3.28 8.71/3.28 (18) QDPSizeChangeProof (EQUIVALENT) 8.71/3.28 By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem. 8.71/3.28 8.71/3.28 From the DPs we obtained the following set of size-change graphs: 8.71/3.28 *f1730_0_reverse_NULL(java.lang.Object(List(java.lang.Object(o999sub:0)))) -> f1730_0_reverse_NULL(java.lang.Object(o999sub:0)) 8.71/3.28 The graph contains the following edges 1 > 1 8.71/3.28 8.71/3.28 8.71/3.28 ---------------------------------------- 8.71/3.28 8.71/3.28 (19) 8.71/3.28 YES 8.71/3.28 8.71/3.28 ---------------------------------------- 8.71/3.28 8.71/3.28 (20) 8.71/3.28 Obligation: 8.71/3.28 SCC of termination graph based on JBC Program. 8.71/3.28 SCC contains nodes from the following methods: ListReverseCyclicList.main([Ljava/lang/String;)V 8.71/3.28 SCC calls the following helper methods: 8.71/3.28 Performed SCC analyses: 8.71/3.28 *Used field analysis yielded the following read fields: 8.71/3.28 *List: [n] 8.71/3.28 *Marker field analysis yielded the following relations that could be markers: 8.71/3.28 8.71/3.28 ---------------------------------------- 8.71/3.28 8.71/3.28 (21) SCCToIRSProof (SOUND) 8.71/3.28 Transformed FIGraph SCCs to intTRSs. Log: 8.71/3.28 Generated rules. Obtained 16 IRulesP rules: 8.71/3.28 f1235_0_reverse_FieldAccess(EOS(STATIC_1235), o563[List.n]o563, o678[List.n]o563) -> f1306_0_reverse_FieldAccess(EOS(STATIC_1306), o563[List.n]o563, o679[List.n]o563) :|: o679[List.n]o563 < o678[List.n]o563 && o678[List.n]o563 >= 0 8.71/3.28 f1306_0_reverse_FieldAccess(EOS(STATIC_1306), o563[List.n]o563, o679[List.n]o563) -> f1377_0_reverse_Store(EOS(STATIC_1377), o563[List.n]o563, o679[List.n]o563) :|: TRUE 8.71/3.28 f1377_0_reverse_Store(EOS(STATIC_1377), o563[List.n]o563, o679[List.n]o563) -> f1405_0_reverse_Load(EOS(STATIC_1405), o563[List.n]o563, o679[List.n]o563) :|: TRUE 8.71/3.28 f1405_0_reverse_Load(EOS(STATIC_1405), o563[List.n]o563, o679[List.n]o563) -> f1425_0_reverse_Load(EOS(STATIC_1425), o563[List.n]o563, o679[List.n]o563) :|: TRUE 8.71/3.28 f1425_0_reverse_Load(EOS(STATIC_1425), o563[List.n]o563, o679[List.n]o563) -> f1470_0_reverse_FieldAccess(EOS(STATIC_1470), o563[List.n]o563, o679[List.n]o563) :|: TRUE 8.71/3.28 f1470_0_reverse_FieldAccess(EOS(STATIC_1470), o563[List.n]o563, o679[List.n]o563) -> f1487_0_reverse_Load(EOS(STATIC_1487), o563[List.n]o563, o679[List.n]o563) :|: TRUE 8.71/3.28 f1487_0_reverse_Load(EOS(STATIC_1487), o563[List.n]o563, o679[List.n]o563) -> f1512_0_reverse_Store(EOS(STATIC_1512), o563[List.n]o563, o679[List.n]o563) :|: TRUE 8.71/3.28 f1512_0_reverse_Store(EOS(STATIC_1512), o563[List.n]o563, o679[List.n]o563) -> f1539_0_reverse_JMP(EOS(STATIC_1539), o563[List.n]o563, o679[List.n]o563) :|: TRUE 8.71/3.28 f1539_0_reverse_JMP(EOS(STATIC_1539), o563[List.n]o563, o679[List.n]o563) -> f1685_0_reverse_Load(EOS(STATIC_1685), o563[List.n]o563, o679[List.n]o563) :|: TRUE 8.71/3.28 f1685_0_reverse_Load(EOS(STATIC_1685), o563[List.n]o563, o679[List.n]o563) -> f1157_0_reverse_Load(EOS(STATIC_1157), o563[List.n]o563, o679[List.n]o563) :|: TRUE 8.71/3.28 f1157_0_reverse_Load(EOS(STATIC_1157), o563[List.n]o563, o562[List.n]o563) -> f1173_0_reverse_NULL(EOS(STATIC_1173), o563[List.n]o563, o562[List.n]o563) :|: TRUE 8.71/3.28 f1173_0_reverse_NULL(EOS(STATIC_1173), o563[List.n]o563, o562[List.n]o563) -> f1182_0_reverse_Load(EOS(STATIC_1182), o563[List.n]o563, o562[List.n]o563) :|: TRUE 8.71/3.28 f1182_0_reverse_Load(EOS(STATIC_1182), o563[List.n]o563, o562[List.n]o563) -> f1196_0_reverse_Store(EOS(STATIC_1196), o563[List.n]o563, o562[List.n]o563) :|: TRUE 8.71/3.28 f1196_0_reverse_Store(EOS(STATIC_1196), o563[List.n]o563, o562[List.n]o563) -> f1205_0_reverse_Load(EOS(STATIC_1205), o563[List.n]o563, o562[List.n]o563) :|: TRUE 8.71/3.28 f1205_0_reverse_Load(EOS(STATIC_1205), o563[List.n]o563, o562[List.n]o563) -> f1212_0_reverse_FieldAccess(EOS(STATIC_1212), o563[List.n]o563, o562[List.n]o563) :|: TRUE 8.71/3.28 f1212_0_reverse_FieldAccess(EOS(STATIC_1212), o563[List.n]o563, o562[List.n]o563) -> f1235_0_reverse_FieldAccess(EOS(STATIC_1235), o563[List.n]o563, o562[List.n]o563) :|: o563[List.n]o563 > 0 && o562[List.n]o563 > 0 8.71/3.28 Combined rules. Obtained 1 IRulesP rules: 8.71/3.28 f1235_0_reverse_FieldAccess(EOS(STATIC_1235), o563[List.n]o563:0, o678[List.n]o563:0) -> f1235_0_reverse_FieldAccess(EOS(STATIC_1235), o563[List.n]o563:0, o679[List.n]o563:0) :|: o678[List.n]o563:0 > -1 && o679[List.n]o563:0 < o678[List.n]o563:0 && o563[List.n]o563:0 > 0 && o679[List.n]o563:0 > 0 8.71/3.28 Filtered constant ground arguments: 8.71/3.28 f1235_0_reverse_FieldAccess(x1, x2, x3) -> f1235_0_reverse_FieldAccess(x2, x3) 8.71/3.28 EOS(x1) -> EOS 8.71/3.28 Finished conversion. Obtained 1 rules.P rules: 8.71/3.28 f1235_0_reverse_FieldAccess(o563[List.n]o563:0, o678[List.n]o563:0) -> f1235_0_reverse_FieldAccess(o563[List.n]o563:0, o679[List.n]o563:0) :|: o679[List.n]o563:0 < o678[List.n]o563:0 && o678[List.n]o563:0 > -1 && o679[List.n]o563:0 > 0 && o563[List.n]o563:0 > 0 8.71/3.28 8.71/3.28 ---------------------------------------- 8.71/3.28 8.71/3.28 (22) 8.71/3.28 Obligation: 8.71/3.28 Rules: 8.71/3.28 f1235_0_reverse_FieldAccess(o563[List.n]o563:0, o678[List.n]o563:0) -> f1235_0_reverse_FieldAccess(o563[List.n]o563:0, o679[List.n]o563:0) :|: o679[List.n]o563:0 < o678[List.n]o563:0 && o678[List.n]o563:0 > -1 && o679[List.n]o563:0 > 0 && o563[List.n]o563:0 > 0 8.71/3.28 8.71/3.28 ---------------------------------------- 8.71/3.28 8.71/3.28 (23) IRSFormatTransformerProof (EQUIVALENT) 8.71/3.28 Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). 8.71/3.28 ---------------------------------------- 8.71/3.28 8.71/3.28 (24) 8.71/3.28 Obligation: 8.71/3.28 Rules: 8.71/3.28 f1235_0_reverse_FieldAccess(o563[List.n]o563:0, o678[List.n]o563:0) -> f1235_0_reverse_FieldAccess(o563[List.n]o563:0, o679[List.n]o563:0) :|: o679[List.n]o563:0 < o678[List.n]o563:0 && o678[List.n]o563:0 > -1 && o679[List.n]o563:0 > 0 && o563[List.n]o563:0 > 0 8.71/3.28 8.71/3.28 ---------------------------------------- 8.71/3.28 8.71/3.28 (25) IRSwTTerminationDigraphProof (EQUIVALENT) 8.71/3.28 Constructed termination digraph! 8.71/3.28 Nodes: 8.71/3.28 (1) f1235_0_reverse_FieldAccess(o563[List.n]o563:0, o678[List.n]o563:0) -> f1235_0_reverse_FieldAccess(o563[List.n]o563:0, o679[List.n]o563:0) :|: o679[List.n]o563:0 < o678[List.n]o563:0 && o678[List.n]o563:0 > -1 && o679[List.n]o563:0 > 0 && o563[List.n]o563:0 > 0 8.71/3.28 8.71/3.28 Arcs: 8.71/3.28 (1) -> (1) 8.71/3.28 8.71/3.28 This digraph is fully evaluated! 8.71/3.28 ---------------------------------------- 8.71/3.28 8.71/3.28 (26) 8.71/3.28 Obligation: 8.71/3.28 8.71/3.28 Termination digraph: 8.71/3.28 Nodes: 8.71/3.28 (1) f1235_0_reverse_FieldAccess(o563[List.n]o563:0, o678[List.n]o563:0) -> f1235_0_reverse_FieldAccess(o563[List.n]o563:0, o679[List.n]o563:0) :|: o679[List.n]o563:0 < o678[List.n]o563:0 && o678[List.n]o563:0 > -1 && o679[List.n]o563:0 > 0 && o563[List.n]o563:0 > 0 8.71/3.28 8.71/3.28 Arcs: 8.71/3.28 (1) -> (1) 8.71/3.28 8.71/3.28 This digraph is fully evaluated! 8.71/3.28 8.71/3.28 ---------------------------------------- 8.71/3.28 8.71/3.28 (27) IntTRSCompressionProof (EQUIVALENT) 8.71/3.28 Compressed rules. 8.71/3.28 ---------------------------------------- 8.71/3.28 8.71/3.28 (28) 8.71/3.28 Obligation: 8.71/3.28 Rules: 8.71/3.28 f1235_0_reverse_FieldAccess(o563[List.n]o563:0:0, o678[List.n]o563:0:0) -> f1235_0_reverse_FieldAccess(o563[List.n]o563:0:0, o679[List.n]o563:0:0) :|: o679[List.n]o563:0:0 > 0 && o563[List.n]o563:0:0 > 0 && o678[List.n]o563:0:0 > -1 && o679[List.n]o563:0:0 < o678[List.n]o563:0:0 8.71/3.28 8.71/3.28 ---------------------------------------- 8.71/3.29 8.71/3.29 (29) FilterProof (EQUIVALENT) 8.71/3.29 Used the following sort dictionary for filtering: 8.71/3.29 f1235_0_reverse_FieldAccess(INTEGER, INTEGER) 8.71/3.29 Replaced non-predefined constructor symbols by 0. 8.71/3.29 ---------------------------------------- 8.71/3.29 8.71/3.29 (30) 8.71/3.29 Obligation: 8.71/3.29 Rules: 8.71/3.29 f1235_0_reverse_FieldAccess(o563[List.n]o563:0:0, o678[List.n]o563:0:0) -> f1235_0_reverse_FieldAccess(o563[List.n]o563:0:0, o679[List.n]o563:0:0) :|: o679[List.n]o563:0:0 > 0 && o563[List.n]o563:0:0 > 0 && o678[List.n]o563:0:0 > -1 && o679[List.n]o563:0:0 < o678[List.n]o563:0:0 8.71/3.29 8.71/3.29 ---------------------------------------- 8.71/3.29 8.71/3.29 (31) IntTRSCompressionProof (EQUIVALENT) 8.71/3.29 Compressed rules. 8.71/3.29 ---------------------------------------- 8.71/3.29 8.71/3.29 (32) 8.71/3.29 Obligation: 8.71/3.29 Rules: 8.71/3.29 f1235_0_reverse_FieldAccess(o563[List.n]o563:0:0:0, o678[List.n]o563:0:0:0) -> f1235_0_reverse_FieldAccess(o563[List.n]o563:0:0:0, o679[List.n]o563:0:0:0) :|: o678[List.n]o563:0:0:0 > -1 && o679[List.n]o563:0:0:0 < o678[List.n]o563:0:0:0 && o563[List.n]o563:0:0:0 > 0 && o679[List.n]o563:0:0:0 > 0 8.71/3.29 8.71/3.29 ---------------------------------------- 8.71/3.29 8.71/3.29 (33) PolynomialOrderProcessor (EQUIVALENT) 8.71/3.29 Found the following polynomial interpretation: 8.71/3.29 [f1235_0_reverse_FieldAccess(x, x1)] = x1 8.71/3.29 8.71/3.29 The following rules are decreasing: 8.71/3.29 f1235_0_reverse_FieldAccess(o563[List.n]o563:0:0:0, o678[List.n]o563:0:0:0) -> f1235_0_reverse_FieldAccess(o563[List.n]o563:0:0:0, o679[List.n]o563:0:0:0) :|: o678[List.n]o563:0:0:0 > -1 && o679[List.n]o563:0:0:0 < o678[List.n]o563:0:0:0 && o563[List.n]o563:0:0:0 > 0 && o679[List.n]o563:0:0:0 > 0 8.71/3.29 The following rules are bounded: 8.71/3.29 f1235_0_reverse_FieldAccess(o563[List.n]o563:0:0:0, o678[List.n]o563:0:0:0) -> f1235_0_reverse_FieldAccess(o563[List.n]o563:0:0:0, o679[List.n]o563:0:0:0) :|: o678[List.n]o563:0:0:0 > -1 && o679[List.n]o563:0:0:0 < o678[List.n]o563:0:0:0 && o563[List.n]o563:0:0:0 > 0 && o679[List.n]o563:0:0:0 > 0 8.71/3.29 8.71/3.29 ---------------------------------------- 8.71/3.29 8.71/3.29 (34) 8.71/3.29 YES 8.71/3.29 8.71/3.29 ---------------------------------------- 8.71/3.29 8.71/3.29 (35) 8.71/3.29 Obligation: 8.71/3.29 SCC of termination graph based on JBC Program. 8.71/3.29 SCC contains nodes from the following methods: ListReverseCyclicList.main([Ljava/lang/String;)V 8.71/3.29 SCC calls the following helper methods: 8.71/3.29 Performed SCC analyses: 8.71/3.29 *Used field analysis yielded the following read fields: 8.71/3.29 8.71/3.29 *Marker field analysis yielded the following relations that could be markers: 8.71/3.29 8.71/3.29 ---------------------------------------- 8.71/3.29 8.71/3.29 (36) SCCToIRSProof (SOUND) 8.71/3.29 Transformed FIGraph SCCs to intTRSs. Log: 8.71/3.29 Generated rules. Obtained 17 IRulesP rules: 8.71/3.29 f404_0_createList_Load(EOS(STATIC_404), i40) -> f407_0_createList_LE(EOS(STATIC_407), i40, i40) :|: TRUE 8.71/3.29 f407_0_createList_LE(EOS(STATIC_407), i42, i42) -> f411_0_createList_LE(EOS(STATIC_411), i42, i42) :|: TRUE 8.71/3.29 f411_0_createList_LE(EOS(STATIC_411), i42, i42) -> f416_0_createList_New(EOS(STATIC_416), i42) :|: i42 > 0 8.71/3.29 f416_0_createList_New(EOS(STATIC_416), i42) -> f419_0_createList_Duplicate(EOS(STATIC_419), i42) :|: TRUE 8.71/3.29 f419_0_createList_Duplicate(EOS(STATIC_419), i42) -> f424_0_createList_Load(EOS(STATIC_424), i42) :|: TRUE 8.71/3.29 f424_0_createList_Load(EOS(STATIC_424), i42) -> f429_0_createList_InvokeMethod(EOS(STATIC_429), i42) :|: TRUE 8.71/3.29 f429_0_createList_InvokeMethod(EOS(STATIC_429), i42) -> f433_0__init__Load(EOS(STATIC_433), i42) :|: TRUE 8.71/3.29 f433_0__init__Load(EOS(STATIC_433), i42) -> f442_0__init__InvokeMethod(EOS(STATIC_442), i42) :|: TRUE 8.71/3.29 f442_0__init__InvokeMethod(EOS(STATIC_442), i42) -> f455_0__init__Load(EOS(STATIC_455), i42) :|: TRUE 8.71/3.29 f455_0__init__Load(EOS(STATIC_455), i42) -> f472_0__init__Load(EOS(STATIC_472), i42) :|: TRUE 8.71/3.29 f472_0__init__Load(EOS(STATIC_472), i42) -> f480_0__init__FieldAccess(EOS(STATIC_480), i42) :|: TRUE 8.71/3.29 f480_0__init__FieldAccess(EOS(STATIC_480), i42) -> f517_0__init__Return(EOS(STATIC_517), i42) :|: TRUE 8.71/3.29 f517_0__init__Return(EOS(STATIC_517), i42) -> f524_0_createList_Store(EOS(STATIC_524), i42) :|: TRUE 8.71/3.29 f524_0_createList_Store(EOS(STATIC_524), i42) -> f527_0_createList_JMP(EOS(STATIC_527), i42) :|: TRUE 8.71/3.29 f527_0_createList_JMP(EOS(STATIC_527), i42) -> f545_0_createList_Inc(EOS(STATIC_545), i42) :|: TRUE 8.71/3.29 f545_0_createList_Inc(EOS(STATIC_545), i42) -> f398_0_createList_Inc(EOS(STATIC_398), i42) :|: TRUE 8.71/3.29 f398_0_createList_Inc(EOS(STATIC_398), i37) -> f404_0_createList_Load(EOS(STATIC_404), i37 + -1) :|: TRUE 8.71/3.29 Combined rules. Obtained 1 IRulesP rules: 8.71/3.29 f404_0_createList_Load(EOS(STATIC_404), i40:0) -> f404_0_createList_Load(EOS(STATIC_404), i40:0 - 1) :|: i40:0 > 0 8.71/3.29 Filtered constant ground arguments: 8.71/3.29 f404_0_createList_Load(x1, x2) -> f404_0_createList_Load(x2) 8.71/3.29 EOS(x1) -> EOS 8.71/3.29 Finished conversion. Obtained 1 rules.P rules: 8.71/3.29 f404_0_createList_Load(i40:0) -> f404_0_createList_Load(i40:0 - 1) :|: i40:0 > 0 8.71/3.29 8.71/3.29 ---------------------------------------- 8.71/3.29 8.71/3.29 (37) 8.71/3.29 Obligation: 8.71/3.29 Rules: 8.71/3.29 f404_0_createList_Load(i40:0) -> f404_0_createList_Load(i40:0 - 1) :|: i40:0 > 0 8.71/3.29 8.71/3.29 ---------------------------------------- 8.71/3.29 8.71/3.29 (38) IRSFormatTransformerProof (EQUIVALENT) 8.71/3.29 Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). 8.71/3.29 ---------------------------------------- 8.71/3.29 8.71/3.29 (39) 8.71/3.29 Obligation: 8.71/3.29 Rules: 8.71/3.29 f404_0_createList_Load(i40:0) -> f404_0_createList_Load(arith) :|: i40:0 > 0 && arith = i40:0 - 1 8.71/3.29 8.71/3.29 ---------------------------------------- 8.71/3.29 8.71/3.29 (40) IRSwTTerminationDigraphProof (EQUIVALENT) 8.71/3.29 Constructed termination digraph! 8.71/3.29 Nodes: 8.71/3.29 (1) f404_0_createList_Load(i40:0) -> f404_0_createList_Load(arith) :|: i40:0 > 0 && arith = i40:0 - 1 8.71/3.29 8.71/3.29 Arcs: 8.71/3.29 (1) -> (1) 8.71/3.29 8.71/3.29 This digraph is fully evaluated! 8.71/3.29 ---------------------------------------- 8.71/3.29 8.71/3.29 (41) 8.71/3.29 Obligation: 8.71/3.29 8.71/3.29 Termination digraph: 8.71/3.29 Nodes: 8.71/3.29 (1) f404_0_createList_Load(i40:0) -> f404_0_createList_Load(arith) :|: i40:0 > 0 && arith = i40:0 - 1 8.71/3.29 8.71/3.29 Arcs: 8.71/3.29 (1) -> (1) 8.71/3.29 8.71/3.29 This digraph is fully evaluated! 8.71/3.29 8.71/3.29 ---------------------------------------- 8.71/3.29 8.71/3.29 (42) IntTRSCompressionProof (EQUIVALENT) 8.71/3.29 Compressed rules. 8.71/3.29 ---------------------------------------- 8.71/3.29 8.71/3.29 (43) 8.71/3.29 Obligation: 8.71/3.29 Rules: 8.71/3.29 f404_0_createList_Load(i40:0:0) -> f404_0_createList_Load(i40:0:0 - 1) :|: i40:0:0 > 0 8.71/3.29 8.71/3.29 ---------------------------------------- 8.71/3.29 8.71/3.29 (44) TempFilterProof (SOUND) 8.71/3.29 Used the following sort dictionary for filtering: 8.71/3.29 f404_0_createList_Load(INTEGER) 8.71/3.29 Replaced non-predefined constructor symbols by 0. 8.71/3.29 ---------------------------------------- 8.71/3.29 8.71/3.29 (45) 8.71/3.29 Obligation: 8.71/3.29 Rules: 8.71/3.29 f404_0_createList_Load(i40:0:0) -> f404_0_createList_Load(c) :|: c = i40:0:0 - 1 && i40:0:0 > 0 8.71/3.29 8.71/3.29 ---------------------------------------- 8.71/3.29 8.71/3.29 (46) PolynomialOrderProcessor (EQUIVALENT) 8.71/3.29 Found the following polynomial interpretation: 8.71/3.29 [f404_0_createList_Load(x)] = x 8.71/3.29 8.71/3.29 The following rules are decreasing: 8.71/3.29 f404_0_createList_Load(i40:0:0) -> f404_0_createList_Load(c) :|: c = i40:0:0 - 1 && i40:0:0 > 0 8.71/3.29 The following rules are bounded: 8.71/3.29 f404_0_createList_Load(i40:0:0) -> f404_0_createList_Load(c) :|: c = i40:0:0 - 1 && i40:0:0 > 0 8.71/3.29 8.71/3.29 ---------------------------------------- 8.71/3.29 8.71/3.29 (47) 8.71/3.29 YES 9.08/3.33 EOF