/export/starexec/sandbox/solver/bin/starexec_run_standard /export/starexec/sandbox/benchmark/theBenchmark.jar /export/starexec/sandbox/output/output_files -------------------------------------------------------------------------------- YES proof of /export/starexec/sandbox/benchmark/theBenchmark.jar # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty termination of the given Bare JBC problem could be proven: (0) Bare JBC problem (1) BareJBCToJBCProof [EQUIVALENT, 97 ms] (2) JBC problem (3) JBCToGraph [EQUIVALENT, 484 ms] (4) JBCTerminationGraph (5) TerminationGraphToSCCProof [SOUND, 0 ms] (6) AND (7) JBCTerminationSCC (8) SCCToIRSProof [SOUND, 113 ms] (9) IRSwT (10) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (11) IRSwT (12) IRSwTTerminationDigraphProof [EQUIVALENT, 0 ms] (13) IRSwT (14) TempFilterProof [SOUND, 23 ms] (15) IRSwT (16) IRSwTToQDPProof [SOUND, 8 ms] (17) QDP (18) QDPSizeChangeProof [EQUIVALENT, 0 ms] (19) YES (20) JBCTerminationSCC (21) SCCToIRSProof [SOUND, 22 ms] (22) IRSwT (23) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (24) IRSwT (25) IRSwTTerminationDigraphProof [EQUIVALENT, 16 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) RankingReductionPairProof [EQUIVALENT, 20 ms] (34) YES (35) JBCTerminationSCC (36) SCCToIRSProof [SOUND, 50 ms] (37) IRSwT (38) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (39) IRSwT (40) IRSwTTerminationDigraphProof [EQUIVALENT, 17 ms] (41) IRSwT (42) IntTRSCompressionProof [EQUIVALENT, 0 ms] (43) IRSwT (44) TempFilterProof [SOUND, 7 ms] (45) IntTRS (46) RankingReductionPairProof [EQUIVALENT, 0 ms] (47) YES ---------------------------------------- (0) Obligation: need to prove termination of the following program: public class ListReverseCyclicList { public static void main(String... args) { List x = List.createCycle(args[0].length()); List.reverse(x); } } class List { List n; public List(List next) { this.n = next; } public static void reverse(List x) { List y = null; while (x != null) { List z = x; x = x.n; z.n = y; y = z; } } public static List createList(int l, List end) { while (--l > 0) { end = new List(end); } return end; } public static List createCycle(int l) { List last = new List(null); List first = createList(l - 1, last); last.n = first; return first; } public static List createPanhandleList(int pl, int cl) { return createList(pl, createCycle(cl)); } } ---------------------------------------- (1) BareJBCToJBCProof (EQUIVALENT) initialized classpath ---------------------------------------- (2) Obligation: need to prove termination of the following program: public class ListReverseCyclicList { public static void main(String... args) { List x = List.createCycle(args[0].length()); List.reverse(x); } } class List { List n; public List(List next) { this.n = next; } public static void reverse(List x) { List y = null; while (x != null) { List z = x; x = x.n; z.n = y; y = z; } } public static List createList(int l, List end) { while (--l > 0) { end = new List(end); } return end; } public static List createCycle(int l) { List last = new List(null); List first = createList(l - 1, last); last.n = first; return first; } public static List createPanhandleList(int pl, int cl) { return createList(pl, createCycle(cl)); } } ---------------------------------------- (3) JBCToGraph (EQUIVALENT) Constructed TerminationGraph. ---------------------------------------- (4) Obligation: Termination Graph based on JBC Program: ListReverseCyclicList.main([Ljava/lang/String;)V: Graph of 261 nodes with 3 SCCs. ---------------------------------------- (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: ListReverseCyclicList.main([Ljava/lang/String;)V SCC calls the following helper methods: Performed SCC analyses: *Used field analysis yielded the following read fields: *List: [n] *Marker field analysis yielded the following relations that could be markers: ---------------------------------------- (8) SCCToIRSProof (SOUND) Transformed FIGraph SCCs to intTRSs. Log: Generated rules. Obtained 16 IRulesP rules: f1919_0_reverse_NULL(EOS(STATIC_1919), java.lang.Object(o1004sub), java.lang.Object(List(EOC, o915104560073)), java.lang.Object(o1004sub)) -> f1931_0_reverse_Load(EOS(STATIC_1931), java.lang.Object(o1004sub), java.lang.Object(List(EOC, o915104560073))) :|: TRUE f1931_0_reverse_Load(EOS(STATIC_1931), java.lang.Object(o1004sub), java.lang.Object(List(EOC, o915104560073))) -> f1935_0_reverse_Store(EOS(STATIC_1935), java.lang.Object(o1004sub), java.lang.Object(List(EOC, o915104560073)), java.lang.Object(o1004sub)) :|: TRUE f1935_0_reverse_Store(EOS(STATIC_1935), java.lang.Object(List(EOC, o1083)), java.lang.Object(List(EOC, o915104560073)), java.lang.Object(List(EOC, o1083))) -> f1950_0_reverse_Store(EOS(STATIC_1950), java.lang.Object(List(EOC, o1083)), java.lang.Object(List(EOC, o915104560073)), java.lang.Object(List(EOC, o1083))) :|: TRUE f1950_0_reverse_Store(EOS(STATIC_1950), java.lang.Object(List(EOC, o1083)), java.lang.Object(List(EOC, o915104560073)), java.lang.Object(List(EOC, o1083))) -> f1960_0_reverse_Load(EOS(STATIC_1960), java.lang.Object(List(EOC, o1083)), java.lang.Object(List(EOC, o915104560073)), java.lang.Object(List(EOC, o1083))) :|: TRUE f1960_0_reverse_Load(EOS(STATIC_1960), java.lang.Object(List(EOC, o1083)), java.lang.Object(List(EOC, o915104560073)), java.lang.Object(List(EOC, o1083))) -> f1969_0_reverse_FieldAccess(EOS(STATIC_1969), java.lang.Object(List(EOC, o915104560073)), java.lang.Object(List(EOC, o1083)), java.lang.Object(List(EOC, o1083))) :|: TRUE f1969_0_reverse_FieldAccess(EOS(STATIC_1969), java.lang.Object(List(EOC, o915104560073)), java.lang.Object(List(EOC, o1083)), java.lang.Object(List(EOC, o1083))) -> f1991_0_reverse_Store(EOS(STATIC_1991), java.lang.Object(List(EOC, o915104560073)), java.lang.Object(List(EOC, o1083)), o1083) :|: TRUE f1991_0_reverse_Store(EOS(STATIC_1991), java.lang.Object(List(EOC, o915104560073)), java.lang.Object(List(EOC, o1083)), o1083) -> f2008_0_reverse_Load(EOS(STATIC_2008), o1083, java.lang.Object(List(EOC, o915104560073)), java.lang.Object(List(EOC, o1083))) :|: TRUE f2008_0_reverse_Load(EOS(STATIC_2008), o1083, java.lang.Object(List(EOC, o915104560073)), java.lang.Object(List(EOC, o1083))) -> f2035_0_reverse_Load(EOS(STATIC_2035), o1083, java.lang.Object(List(EOC, o915104560073)), java.lang.Object(List(EOC, o1083)), java.lang.Object(List(EOC, o1083))) :|: TRUE f2035_0_reverse_Load(EOS(STATIC_2035), o1083, java.lang.Object(List(EOC, o915104560073)), java.lang.Object(List(EOC, o1083)), java.lang.Object(List(EOC, o1083))) -> f2054_0_reverse_FieldAccess(EOS(STATIC_2054), o1083, java.lang.Object(List(EOC, o1083)), java.lang.Object(List(EOC, o1083)), java.lang.Object(List(EOC, o915104560073))) :|: TRUE f2054_0_reverse_FieldAccess(EOS(STATIC_2054), o1083, java.lang.Object(List(EOC, o1083)), java.lang.Object(List(EOC, o1083)), java.lang.Object(List(EOC, o915104560073))) -> f2088_0_reverse_Load(EOS(STATIC_2088), o1083, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o915put-965531145))))) :|: TRUE f2088_0_reverse_Load(EOS(STATIC_2088), o1083, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o915-965531145))))) -> f2102_0_reverse_Store(EOS(STATIC_2102), o1083, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o915-965531145))))) :|: TRUE f2102_0_reverse_Store(EOS(STATIC_2102), o1083, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o915-965531145))))) -> f2147_0_reverse_JMP(EOS(STATIC_2147), o1083, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o915-965531145))))) :|: TRUE f2147_0_reverse_JMP(EOS(STATIC_2147), o1083, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o915-965531145))))) -> f2187_0_reverse_Load(EOS(STATIC_2187), o1083, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o915-965531145))))) :|: TRUE f2187_0_reverse_Load(EOS(STATIC_2187), o1083, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o915-965531145))))) -> f1858_0_reverse_Load(EOS(STATIC_1858), o1083, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o915-965531145))))) :|: TRUE f1858_0_reverse_Load(EOS(STATIC_1858), o913, java.lang.Object(List(EOC, o915104560073))) -> f1902_0_reverse_NULL(EOS(STATIC_1902), o913, java.lang.Object(List(EOC, o915104560073)), o913) :|: TRUE f1902_0_reverse_NULL(EOS(STATIC_1902), java.lang.Object(o1004sub), java.lang.Object(List(EOC, o915104560073)), java.lang.Object(o1004sub)) -> f1919_0_reverse_NULL(EOS(STATIC_1919), java.lang.Object(o1004sub), java.lang.Object(List(EOC, o915104560073)), java.lang.Object(o1004sub)) :|: TRUE Combined rules. Obtained 1 IRulesP rules: f1919_0_reverse_NULL(EOS(STATIC_1919), java.lang.Object(List(EOC, java.lang.Object(o1004sub:0))), java.lang.Object(List(EOC, o915104560073:0)), java.lang.Object(List(EOC, java.lang.Object(o1004sub:0)))) -> f1919_0_reverse_NULL(EOS(STATIC_1919), java.lang.Object(o1004sub:0), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o915put-965531145:0)))), java.lang.Object(o1004sub:0)) :|: TRUE Filtered constant ground arguments: f1919_0_reverse_NULL(x1, x2, x3, x4) -> f1919_0_reverse_NULL(x2, x3, x4) EOS(x1) -> EOS List(x1, x2) -> List(x2) Filtered duplicate arguments: f1919_0_reverse_NULL(x1, x2, x3) -> f1919_0_reverse_NULL(x2, x3) Finished conversion. Obtained 1 rules.P rules: f1919_0_reverse_NULL(java.lang.Object(List(o915104560073:0)), java.lang.Object(List(java.lang.Object(o1004sub:0)))) -> f1919_0_reverse_NULL(java.lang.Object(List(java.lang.Object(List(o915put-965531145:0)))), java.lang.Object(o1004sub:0)) :|: TRUE ---------------------------------------- (9) Obligation: Rules: f1919_0_reverse_NULL(java.lang.Object(List(o915104560073:0)), java.lang.Object(List(java.lang.Object(o1004sub:0)))) -> f1919_0_reverse_NULL(java.lang.Object(List(java.lang.Object(List(o915put-965531145:0)))), java.lang.Object(o1004sub:0)) :|: TRUE ---------------------------------------- (10) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (11) Obligation: Rules: f1919_0_reverse_NULL(java.lang.Object(List(o915104560073:0)), java.lang.Object(List(java.lang.Object(o1004sub:0)))) -> f1919_0_reverse_NULL(java.lang.Object(List(java.lang.Object(List(o915put-965531145:0)))), java.lang.Object(o1004sub:0)) :|: TRUE ---------------------------------------- (12) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f1919_0_reverse_NULL(java.lang.Object(List(o915104560073:0)), java.lang.Object(List(java.lang.Object(o1004sub:0)))) -> f1919_0_reverse_NULL(java.lang.Object(List(java.lang.Object(List(o915put-965531145:0)))), java.lang.Object(o1004sub:0)) :|: TRUE Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (13) Obligation: Termination digraph: Nodes: (1) f1919_0_reverse_NULL(java.lang.Object(List(o915104560073:0)), java.lang.Object(List(java.lang.Object(o1004sub:0)))) -> f1919_0_reverse_NULL(java.lang.Object(List(java.lang.Object(List(o915put-965531145:0)))), java.lang.Object(o1004sub:0)) :|: TRUE Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (14) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f1919_0_reverse_NULL(VARIABLE, VARIABLE) java.lang.Object(VARIABLE) List(VARIABLE) Removed predefined arithmetic. ---------------------------------------- (15) Obligation: Rules: f1919_0_reverse_NULL(java.lang.Object(List(java.lang.Object(o1004sub:0)))) -> f1919_0_reverse_NULL(java.lang.Object(o1004sub:0)) :|: TRUE ---------------------------------------- (16) IRSwTToQDPProof (SOUND) Removed the integers and created a QDP-Problem. ---------------------------------------- (17) Obligation: Q DP problem: The TRS P consists of the following rules: f1919_0_reverse_NULL(java.lang.Object(List(java.lang.Object(o1004sub:0)))) -> f1919_0_reverse_NULL(java.lang.Object(o1004sub:0)) R is empty. Q is empty. We have to consider all (P,Q,R)-chains. ---------------------------------------- (18) QDPSizeChangeProof (EQUIVALENT) 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. From the DPs we obtained the following set of size-change graphs: *f1919_0_reverse_NULL(java.lang.Object(List(java.lang.Object(o1004sub:0)))) -> f1919_0_reverse_NULL(java.lang.Object(o1004sub:0)) The graph contains the following edges 1 > 1 ---------------------------------------- (19) YES ---------------------------------------- (20) Obligation: SCC of termination graph based on JBC Program. SCC contains nodes from the following methods: ListReverseCyclicList.main([Ljava/lang/String;)V SCC calls the following helper methods: Performed SCC analyses: *Used field analysis yielded the following read fields: *List: [n] *Marker field analysis yielded the following relations that could be markers: ---------------------------------------- (21) SCCToIRSProof (SOUND) Transformed FIGraph SCCs to intTRSs. Log: Generated rules. Obtained 16 IRulesP rules: f1632_0_reverse_FieldAccess(EOS(STATIC_1632), o573[List.n]o573, o684[List.n]o573) -> f1640_0_reverse_FieldAccess(EOS(STATIC_1640), o573[List.n]o573, o685[List.n]o573) :|: o685[List.n]o573 < o684[List.n]o573 && o684[List.n]o573 >= 0 f1640_0_reverse_FieldAccess(EOS(STATIC_1640), o573[List.n]o573, o685[List.n]o573) -> f1653_0_reverse_Store(EOS(STATIC_1653), o573[List.n]o573, o685[List.n]o573) :|: TRUE f1653_0_reverse_Store(EOS(STATIC_1653), o573[List.n]o573, o685[List.n]o573) -> f1679_0_reverse_Load(EOS(STATIC_1679), o573[List.n]o573, o685[List.n]o573) :|: TRUE f1679_0_reverse_Load(EOS(STATIC_1679), o573[List.n]o573, o685[List.n]o573) -> f1700_0_reverse_Load(EOS(STATIC_1700), o573[List.n]o573, o685[List.n]o573) :|: TRUE f1700_0_reverse_Load(EOS(STATIC_1700), o573[List.n]o573, o685[List.n]o573) -> f1724_0_reverse_FieldAccess(EOS(STATIC_1724), o573[List.n]o573, o685[List.n]o573) :|: TRUE f1724_0_reverse_FieldAccess(EOS(STATIC_1724), o573[List.n]o573, o685[List.n]o573) -> f1753_0_reverse_Load(EOS(STATIC_1753), o573[List.n]o573, o685[List.n]o573) :|: TRUE f1753_0_reverse_Load(EOS(STATIC_1753), o573[List.n]o573, o685[List.n]o573) -> f1765_0_reverse_Store(EOS(STATIC_1765), o573[List.n]o573, o685[List.n]o573) :|: TRUE f1765_0_reverse_Store(EOS(STATIC_1765), o573[List.n]o573, o685[List.n]o573) -> f1787_0_reverse_JMP(EOS(STATIC_1787), o573[List.n]o573, o685[List.n]o573) :|: TRUE f1787_0_reverse_JMP(EOS(STATIC_1787), o573[List.n]o573, o685[List.n]o573) -> f1879_0_reverse_Load(EOS(STATIC_1879), o573[List.n]o573, o685[List.n]o573) :|: TRUE f1879_0_reverse_Load(EOS(STATIC_1879), o573[List.n]o573, o685[List.n]o573) -> f1558_0_reverse_Load(EOS(STATIC_1558), o573[List.n]o573, o685[List.n]o573) :|: TRUE f1558_0_reverse_Load(EOS(STATIC_1558), o573[List.n]o573, o572[List.n]o573) -> f1579_0_reverse_NULL(EOS(STATIC_1579), o573[List.n]o573, o572[List.n]o573) :|: TRUE f1579_0_reverse_NULL(EOS(STATIC_1579), o573[List.n]o573, o572[List.n]o573) -> f1583_0_reverse_Load(EOS(STATIC_1583), o573[List.n]o573, o572[List.n]o573) :|: TRUE f1583_0_reverse_Load(EOS(STATIC_1583), o573[List.n]o573, o572[List.n]o573) -> f1588_0_reverse_Store(EOS(STATIC_1588), o573[List.n]o573, o572[List.n]o573) :|: TRUE f1588_0_reverse_Store(EOS(STATIC_1588), o573[List.n]o573, o572[List.n]o573) -> f1600_0_reverse_Load(EOS(STATIC_1600), o573[List.n]o573, o572[List.n]o573) :|: TRUE f1600_0_reverse_Load(EOS(STATIC_1600), o573[List.n]o573, o572[List.n]o573) -> f1612_0_reverse_FieldAccess(EOS(STATIC_1612), o573[List.n]o573, o572[List.n]o573) :|: TRUE f1612_0_reverse_FieldAccess(EOS(STATIC_1612), o573[List.n]o573, o572[List.n]o573) -> f1632_0_reverse_FieldAccess(EOS(STATIC_1632), o573[List.n]o573, o572[List.n]o573) :|: o573[List.n]o573 > 0 && o572[List.n]o573 > 0 Combined rules. Obtained 1 IRulesP rules: f1632_0_reverse_FieldAccess(EOS(STATIC_1632), o573[List.n]o573:0, o684[List.n]o573:0) -> f1632_0_reverse_FieldAccess(EOS(STATIC_1632), o573[List.n]o573:0, o685[List.n]o573:0) :|: o684[List.n]o573:0 > -1 && o685[List.n]o573:0 < o684[List.n]o573:0 && o573[List.n]o573:0 > 0 && o685[List.n]o573:0 > 0 Filtered constant ground arguments: f1632_0_reverse_FieldAccess(x1, x2, x3) -> f1632_0_reverse_FieldAccess(x2, x3) EOS(x1) -> EOS Finished conversion. Obtained 1 rules.P rules: f1632_0_reverse_FieldAccess(o573[List.n]o573:0, o684[List.n]o573:0) -> f1632_0_reverse_FieldAccess(o573[List.n]o573:0, o685[List.n]o573:0) :|: o685[List.n]o573:0 < o684[List.n]o573:0 && o684[List.n]o573:0 > -1 && o685[List.n]o573:0 > 0 && o573[List.n]o573:0 > 0 ---------------------------------------- (22) Obligation: Rules: f1632_0_reverse_FieldAccess(o573[List.n]o573:0, o684[List.n]o573:0) -> f1632_0_reverse_FieldAccess(o573[List.n]o573:0, o685[List.n]o573:0) :|: o685[List.n]o573:0 < o684[List.n]o573:0 && o684[List.n]o573:0 > -1 && o685[List.n]o573:0 > 0 && o573[List.n]o573:0 > 0 ---------------------------------------- (23) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (24) Obligation: Rules: f1632_0_reverse_FieldAccess(o573[List.n]o573:0, o684[List.n]o573:0) -> f1632_0_reverse_FieldAccess(o573[List.n]o573:0, o685[List.n]o573:0) :|: o685[List.n]o573:0 < o684[List.n]o573:0 && o684[List.n]o573:0 > -1 && o685[List.n]o573:0 > 0 && o573[List.n]o573:0 > 0 ---------------------------------------- (25) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f1632_0_reverse_FieldAccess(o573[List.n]o573:0, o684[List.n]o573:0) -> f1632_0_reverse_FieldAccess(o573[List.n]o573:0, o685[List.n]o573:0) :|: o685[List.n]o573:0 < o684[List.n]o573:0 && o684[List.n]o573:0 > -1 && o685[List.n]o573:0 > 0 && o573[List.n]o573:0 > 0 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (26) Obligation: Termination digraph: Nodes: (1) f1632_0_reverse_FieldAccess(o573[List.n]o573:0, o684[List.n]o573:0) -> f1632_0_reverse_FieldAccess(o573[List.n]o573:0, o685[List.n]o573:0) :|: o685[List.n]o573:0 < o684[List.n]o573:0 && o684[List.n]o573:0 > -1 && o685[List.n]o573:0 > 0 && o573[List.n]o573:0 > 0 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (27) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (28) Obligation: Rules: f1632_0_reverse_FieldAccess(o573[List.n]o573:0:0, o684[List.n]o573:0:0) -> f1632_0_reverse_FieldAccess(o573[List.n]o573:0:0, o685[List.n]o573:0:0) :|: o685[List.n]o573:0:0 > 0 && o573[List.n]o573:0:0 > 0 && o684[List.n]o573:0:0 > -1 && o685[List.n]o573:0:0 < o684[List.n]o573:0:0 ---------------------------------------- (29) FilterProof (EQUIVALENT) Used the following sort dictionary for filtering: f1632_0_reverse_FieldAccess(INTEGER, INTEGER) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (30) Obligation: Rules: f1632_0_reverse_FieldAccess(o573[List.n]o573:0:0, o684[List.n]o573:0:0) -> f1632_0_reverse_FieldAccess(o573[List.n]o573:0:0, o685[List.n]o573:0:0) :|: o685[List.n]o573:0:0 > 0 && o573[List.n]o573:0:0 > 0 && o684[List.n]o573:0:0 > -1 && o685[List.n]o573:0:0 < o684[List.n]o573:0:0 ---------------------------------------- (31) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (32) Obligation: Rules: f1632_0_reverse_FieldAccess(o573[List.n]o573:0:0:0, o684[List.n]o573:0:0:0) -> f1632_0_reverse_FieldAccess(o573[List.n]o573:0:0:0, o685[List.n]o573:0:0:0) :|: o684[List.n]o573:0:0:0 > -1 && o685[List.n]o573:0:0:0 < o684[List.n]o573:0:0:0 && o573[List.n]o573:0:0:0 > 0 && o685[List.n]o573:0:0:0 > 0 ---------------------------------------- (33) RankingReductionPairProof (EQUIVALENT) Interpretation: [ f1632_0_reverse_FieldAccess ] = f1632_0_reverse_FieldAccess_2 The following rules are decreasing: f1632_0_reverse_FieldAccess(o573[List.n]o573:0:0:0, o684[List.n]o573:0:0:0) -> f1632_0_reverse_FieldAccess(o573[List.n]o573:0:0:0, o685[List.n]o573:0:0:0) :|: o684[List.n]o573:0:0:0 > -1 && o685[List.n]o573:0:0:0 < o684[List.n]o573:0:0:0 && o573[List.n]o573:0:0:0 > 0 && o685[List.n]o573:0:0:0 > 0 The following rules are bounded: f1632_0_reverse_FieldAccess(o573[List.n]o573:0:0:0, o684[List.n]o573:0:0:0) -> f1632_0_reverse_FieldAccess(o573[List.n]o573:0:0:0, o685[List.n]o573:0:0:0) :|: o684[List.n]o573:0:0:0 > -1 && o685[List.n]o573:0:0:0 < o684[List.n]o573:0:0:0 && o573[List.n]o573:0:0:0 > 0 && o685[List.n]o573:0:0:0 > 0 ---------------------------------------- (34) YES ---------------------------------------- (35) Obligation: SCC of termination graph based on JBC Program. SCC contains nodes from the following methods: ListReverseCyclicList.main([Ljava/lang/String;)V 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: ---------------------------------------- (36) SCCToIRSProof (SOUND) Transformed FIGraph SCCs to intTRSs. Log: Generated rules. Obtained 17 IRulesP rules: f394_0_createList_Load(EOS(STATIC_394), i40) -> f395_0_createList_LE(EOS(STATIC_395), i40, i40) :|: TRUE f395_0_createList_LE(EOS(STATIC_395), i42, i42) -> f397_0_createList_LE(EOS(STATIC_397), i42, i42) :|: TRUE f397_0_createList_LE(EOS(STATIC_397), i42, i42) -> f401_0_createList_New(EOS(STATIC_401), i42) :|: i42 > 0 f401_0_createList_New(EOS(STATIC_401), i42) -> f404_0_createList_Duplicate(EOS(STATIC_404), i42) :|: TRUE f404_0_createList_Duplicate(EOS(STATIC_404), i42) -> f408_0_createList_Load(EOS(STATIC_408), i42) :|: TRUE f408_0_createList_Load(EOS(STATIC_408), i42) -> f413_0_createList_InvokeMethod(EOS(STATIC_413), i42) :|: TRUE f413_0_createList_InvokeMethod(EOS(STATIC_413), i42) -> f418_0__init__Load(EOS(STATIC_418), i42) :|: TRUE f418_0__init__Load(EOS(STATIC_418), i42) -> f427_0__init__InvokeMethod(EOS(STATIC_427), i42) :|: TRUE f427_0__init__InvokeMethod(EOS(STATIC_427), i42) -> f438_0__init__Load(EOS(STATIC_438), i42) :|: TRUE f438_0__init__Load(EOS(STATIC_438), i42) -> f460_0__init__Load(EOS(STATIC_460), i42) :|: TRUE f460_0__init__Load(EOS(STATIC_460), i42) -> f469_0__init__FieldAccess(EOS(STATIC_469), i42) :|: TRUE f469_0__init__FieldAccess(EOS(STATIC_469), i42) -> f480_0__init__Return(EOS(STATIC_480), i42) :|: TRUE f480_0__init__Return(EOS(STATIC_480), i42) -> f486_0_createList_Store(EOS(STATIC_486), i42) :|: TRUE f486_0_createList_Store(EOS(STATIC_486), i42) -> f496_0_createList_JMP(EOS(STATIC_496), i42) :|: TRUE f496_0_createList_JMP(EOS(STATIC_496), i42) -> f525_0_createList_Inc(EOS(STATIC_525), i42) :|: TRUE f525_0_createList_Inc(EOS(STATIC_525), i42) -> f388_0_createList_Inc(EOS(STATIC_388), i42) :|: TRUE f388_0_createList_Inc(EOS(STATIC_388), i36) -> f394_0_createList_Load(EOS(STATIC_394), i36 + -1) :|: TRUE Combined rules. Obtained 1 IRulesP rules: f394_0_createList_Load(EOS(STATIC_394), i40:0) -> f394_0_createList_Load(EOS(STATIC_394), i40:0 - 1) :|: i40:0 > 0 Filtered constant ground arguments: f394_0_createList_Load(x1, x2) -> f394_0_createList_Load(x2) EOS(x1) -> EOS Finished conversion. Obtained 1 rules.P rules: f394_0_createList_Load(i40:0) -> f394_0_createList_Load(i40:0 - 1) :|: i40:0 > 0 ---------------------------------------- (37) Obligation: Rules: f394_0_createList_Load(i40:0) -> f394_0_createList_Load(i40:0 - 1) :|: i40:0 > 0 ---------------------------------------- (38) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (39) Obligation: Rules: f394_0_createList_Load(i40:0) -> f394_0_createList_Load(arith) :|: i40:0 > 0 && arith = i40:0 - 1 ---------------------------------------- (40) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f394_0_createList_Load(i40:0) -> f394_0_createList_Load(arith) :|: i40:0 > 0 && arith = i40:0 - 1 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (41) Obligation: Termination digraph: Nodes: (1) f394_0_createList_Load(i40:0) -> f394_0_createList_Load(arith) :|: i40:0 > 0 && arith = i40:0 - 1 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (42) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (43) Obligation: Rules: f394_0_createList_Load(i40:0:0) -> f394_0_createList_Load(i40:0:0 - 1) :|: i40:0:0 > 0 ---------------------------------------- (44) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f394_0_createList_Load(INTEGER) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (45) Obligation: Rules: f394_0_createList_Load(i40:0:0) -> f394_0_createList_Load(c) :|: c = i40:0:0 - 1 && i40:0:0 > 0 ---------------------------------------- (46) RankingReductionPairProof (EQUIVALENT) Interpretation: [ f394_0_createList_Load ] = f394_0_createList_Load_1 The following rules are decreasing: f394_0_createList_Load(i40:0:0) -> f394_0_createList_Load(c) :|: c = i40:0:0 - 1 && i40:0:0 > 0 The following rules are bounded: f394_0_createList_Load(i40:0:0) -> f394_0_createList_Load(c) :|: c = i40:0:0 - 1 && i40:0:0 > 0 ---------------------------------------- (47) YES