/export/starexec/sandbox2/solver/bin/starexec_run_standard /export/starexec/sandbox2/benchmark/theBenchmark.jar /export/starexec/sandbox2/output/output_files -------------------------------------------------------------------------------- YES proof of /export/starexec/sandbox2/benchmark/theBenchmark.jar # AProVE Commit ID: 794c25de1cacf0d048858bcd21c9a779e1221865 marcel 20200619 unpublished dirty termination of the given Bare JBC problem could be proven: (0) Bare JBC problem (1) BareJBCToJBCProof [EQUIVALENT, 96 ms] (2) JBC problem (3) JBCToGraph [EQUIVALENT, 443 ms] (4) JBCTerminationGraph (5) TerminationGraphToSCCProof [SOUND, 10 ms] (6) AND (7) JBCTerminationSCC (8) SCCToIRSProof [SOUND, 87 ms] (9) IRSwT (10) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (11) IRSwT (12) IRSwTTerminationDigraphProof [EQUIVALENT, 0 ms] (13) IRSwT (14) TempFilterProof [SOUND, 24 ms] (15) IRSwT (16) IRSwTToQDPProof [SOUND, 0 ms] (17) QDP (18) QDPSizeChangeProof [EQUIVALENT, 0 ms] (19) YES (20) JBCTerminationSCC (21) SCCToIRSProof [SOUND, 65 ms] (22) IRSwT (23) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (24) IRSwT (25) IRSwTTerminationDigraphProof [EQUIVALENT, 0 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) PolynomialOrderProcessor [EQUIVALENT, 1 ms] (34) YES (35) JBCTerminationSCC (36) SCCToIRSProof [SOUND, 35 ms] (37) IRSwT (38) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (39) IRSwT (40) IRSwTTerminationDigraphProof [EQUIVALENT, 0 ms] (41) IRSwT (42) IntTRSCompressionProof [EQUIVALENT, 0 ms] (43) IRSwT (44) TempFilterProof [SOUND, 19 ms] (45) IntTRS (46) RankingReductionPairProof [EQUIVALENT, 13 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: f1485_0_reverse_NULL(EOS(STATIC_1485), java.lang.Object(o1002sub), java.lang.Object(List(EOC, o9141813016042)), java.lang.Object(o1002sub)) -> f1489_0_reverse_Load(EOS(STATIC_1489), java.lang.Object(o1002sub), java.lang.Object(List(EOC, o9141813016042))) :|: TRUE f1489_0_reverse_Load(EOS(STATIC_1489), java.lang.Object(o1002sub), java.lang.Object(List(EOC, o9141813016042))) -> f1493_0_reverse_Store(EOS(STATIC_1493), java.lang.Object(o1002sub), java.lang.Object(List(EOC, o9141813016042)), java.lang.Object(o1002sub)) :|: TRUE f1493_0_reverse_Store(EOS(STATIC_1493), java.lang.Object(List(EOC, o1081)), java.lang.Object(List(EOC, o9141813016042)), java.lang.Object(List(EOC, o1081))) -> f1517_0_reverse_Store(EOS(STATIC_1517), java.lang.Object(List(EOC, o1081)), java.lang.Object(List(EOC, o9141813016042)), java.lang.Object(List(EOC, o1081))) :|: TRUE f1517_0_reverse_Store(EOS(STATIC_1517), java.lang.Object(List(EOC, o1081)), java.lang.Object(List(EOC, o9141813016042)), java.lang.Object(List(EOC, o1081))) -> f1519_0_reverse_Load(EOS(STATIC_1519), java.lang.Object(List(EOC, o1081)), java.lang.Object(List(EOC, o9141813016042)), java.lang.Object(List(EOC, o1081))) :|: TRUE f1519_0_reverse_Load(EOS(STATIC_1519), java.lang.Object(List(EOC, o1081)), java.lang.Object(List(EOC, o9141813016042)), java.lang.Object(List(EOC, o1081))) -> f1521_0_reverse_FieldAccess(EOS(STATIC_1521), java.lang.Object(List(EOC, o9141813016042)), java.lang.Object(List(EOC, o1081)), java.lang.Object(List(EOC, o1081))) :|: TRUE f1521_0_reverse_FieldAccess(EOS(STATIC_1521), java.lang.Object(List(EOC, o9141813016042)), java.lang.Object(List(EOC, o1081)), java.lang.Object(List(EOC, o1081))) -> f1523_0_reverse_Store(EOS(STATIC_1523), java.lang.Object(List(EOC, o9141813016042)), java.lang.Object(List(EOC, o1081)), o1081) :|: TRUE f1523_0_reverse_Store(EOS(STATIC_1523), java.lang.Object(List(EOC, o9141813016042)), java.lang.Object(List(EOC, o1081)), o1081) -> f1561_0_reverse_Load(EOS(STATIC_1561), o1081, java.lang.Object(List(EOC, o9141813016042)), java.lang.Object(List(EOC, o1081))) :|: TRUE f1561_0_reverse_Load(EOS(STATIC_1561), o1081, java.lang.Object(List(EOC, o9141813016042)), java.lang.Object(List(EOC, o1081))) -> f1587_0_reverse_Load(EOS(STATIC_1587), o1081, java.lang.Object(List(EOC, o9141813016042)), java.lang.Object(List(EOC, o1081)), java.lang.Object(List(EOC, o1081))) :|: TRUE f1587_0_reverse_Load(EOS(STATIC_1587), o1081, java.lang.Object(List(EOC, o9141813016042)), java.lang.Object(List(EOC, o1081)), java.lang.Object(List(EOC, o1081))) -> f1597_0_reverse_FieldAccess(EOS(STATIC_1597), o1081, java.lang.Object(List(EOC, o1081)), java.lang.Object(List(EOC, o1081)), java.lang.Object(List(EOC, o9141813016042))) :|: TRUE f1597_0_reverse_FieldAccess(EOS(STATIC_1597), o1081, java.lang.Object(List(EOC, o1081)), java.lang.Object(List(EOC, o1081)), java.lang.Object(List(EOC, o9141813016042))) -> f1652_0_reverse_Load(EOS(STATIC_1652), o1081, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o914put-1843586534))))) :|: TRUE f1652_0_reverse_Load(EOS(STATIC_1652), o1081, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o914-1843586534))))) -> f1667_0_reverse_Store(EOS(STATIC_1667), o1081, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o914-1843586534))))) :|: TRUE f1667_0_reverse_Store(EOS(STATIC_1667), o1081, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o914-1843586534))))) -> f1697_0_reverse_JMP(EOS(STATIC_1697), o1081, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o914-1843586534))))) :|: TRUE f1697_0_reverse_JMP(EOS(STATIC_1697), o1081, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o914-1843586534))))) -> f1807_0_reverse_Load(EOS(STATIC_1807), o1081, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o914-1843586534))))) :|: TRUE f1807_0_reverse_Load(EOS(STATIC_1807), o1081, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o914-1843586534))))) -> f1379_0_reverse_Load(EOS(STATIC_1379), o1081, java.lang.Object(List(EOC, java.lang.Object(List(EOC, o914-1843586534))))) :|: TRUE f1379_0_reverse_Load(EOS(STATIC_1379), o912, java.lang.Object(List(EOC, o9141813016042))) -> f1431_0_reverse_NULL(EOS(STATIC_1431), o912, java.lang.Object(List(EOC, o9141813016042)), o912) :|: TRUE f1431_0_reverse_NULL(EOS(STATIC_1431), java.lang.Object(o1002sub), java.lang.Object(List(EOC, o9141813016042)), java.lang.Object(o1002sub)) -> f1485_0_reverse_NULL(EOS(STATIC_1485), java.lang.Object(o1002sub), java.lang.Object(List(EOC, o9141813016042)), java.lang.Object(o1002sub)) :|: TRUE Combined rules. Obtained 1 IRulesP rules: f1485_0_reverse_NULL(EOS(STATIC_1485), java.lang.Object(List(EOC, java.lang.Object(o1002sub:0))), java.lang.Object(List(EOC, o9141813016042:0)), java.lang.Object(List(EOC, java.lang.Object(o1002sub:0)))) -> f1485_0_reverse_NULL(EOS(STATIC_1485), java.lang.Object(o1002sub:0), java.lang.Object(List(EOC, java.lang.Object(List(EOC, o914put-1843586534:0)))), java.lang.Object(o1002sub:0)) :|: TRUE Filtered constant ground arguments: f1485_0_reverse_NULL(x1, x2, x3, x4) -> f1485_0_reverse_NULL(x2, x3, x4) EOS(x1) -> EOS List(x1, x2) -> List(x2) Filtered duplicate arguments: f1485_0_reverse_NULL(x1, x2, x3) -> f1485_0_reverse_NULL(x2, x3) Finished conversion. Obtained 1 rules.P rules: f1485_0_reverse_NULL(java.lang.Object(List(o9141813016042:0)), java.lang.Object(List(java.lang.Object(o1002sub:0)))) -> f1485_0_reverse_NULL(java.lang.Object(List(java.lang.Object(List(o914put-1843586534:0)))), java.lang.Object(o1002sub:0)) :|: TRUE ---------------------------------------- (9) Obligation: Rules: f1485_0_reverse_NULL(java.lang.Object(List(o9141813016042:0)), java.lang.Object(List(java.lang.Object(o1002sub:0)))) -> f1485_0_reverse_NULL(java.lang.Object(List(java.lang.Object(List(o914put-1843586534:0)))), java.lang.Object(o1002sub:0)) :|: TRUE ---------------------------------------- (10) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (11) Obligation: Rules: f1485_0_reverse_NULL(java.lang.Object(List(o9141813016042:0)), java.lang.Object(List(java.lang.Object(o1002sub:0)))) -> f1485_0_reverse_NULL(java.lang.Object(List(java.lang.Object(List(o914put-1843586534:0)))), java.lang.Object(o1002sub:0)) :|: TRUE ---------------------------------------- (12) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f1485_0_reverse_NULL(java.lang.Object(List(o9141813016042:0)), java.lang.Object(List(java.lang.Object(o1002sub:0)))) -> f1485_0_reverse_NULL(java.lang.Object(List(java.lang.Object(List(o914put-1843586534:0)))), java.lang.Object(o1002sub:0)) :|: TRUE Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (13) Obligation: Termination digraph: Nodes: (1) f1485_0_reverse_NULL(java.lang.Object(List(o9141813016042:0)), java.lang.Object(List(java.lang.Object(o1002sub:0)))) -> f1485_0_reverse_NULL(java.lang.Object(List(java.lang.Object(List(o914put-1843586534:0)))), java.lang.Object(o1002sub:0)) :|: TRUE Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (14) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f1485_0_reverse_NULL(VARIABLE, VARIABLE) java.lang.Object(VARIABLE) List(VARIABLE) Removed predefined arithmetic. ---------------------------------------- (15) Obligation: Rules: f1485_0_reverse_NULL(java.lang.Object(List(java.lang.Object(o1002sub:0)))) -> f1485_0_reverse_NULL(java.lang.Object(o1002sub: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: f1485_0_reverse_NULL(java.lang.Object(List(java.lang.Object(o1002sub:0)))) -> f1485_0_reverse_NULL(java.lang.Object(o1002sub: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: *f1485_0_reverse_NULL(java.lang.Object(List(java.lang.Object(o1002sub:0)))) -> f1485_0_reverse_NULL(java.lang.Object(o1002sub: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: f1099_0_reverse_FieldAccess(EOS(STATIC_1099), o566[List.n]o566, o681[List.n]o566) -> f1111_0_reverse_FieldAccess(EOS(STATIC_1111), o566[List.n]o566, o682[List.n]o566) :|: o682[List.n]o566 < o681[List.n]o566 && o681[List.n]o566 >= 0 f1111_0_reverse_FieldAccess(EOS(STATIC_1111), o566[List.n]o566, o682[List.n]o566) -> f1119_0_reverse_Store(EOS(STATIC_1119), o566[List.n]o566, o682[List.n]o566) :|: TRUE f1119_0_reverse_Store(EOS(STATIC_1119), o566[List.n]o566, o682[List.n]o566) -> f1123_0_reverse_Load(EOS(STATIC_1123), o566[List.n]o566, o682[List.n]o566) :|: TRUE f1123_0_reverse_Load(EOS(STATIC_1123), o566[List.n]o566, o682[List.n]o566) -> f1140_0_reverse_Load(EOS(STATIC_1140), o566[List.n]o566, o682[List.n]o566) :|: TRUE f1140_0_reverse_Load(EOS(STATIC_1140), o566[List.n]o566, o682[List.n]o566) -> f1181_0_reverse_FieldAccess(EOS(STATIC_1181), o566[List.n]o566, o682[List.n]o566) :|: TRUE f1181_0_reverse_FieldAccess(EOS(STATIC_1181), o566[List.n]o566, o682[List.n]o566) -> f1230_0_reverse_Load(EOS(STATIC_1230), o566[List.n]o566, o682[List.n]o566) :|: TRUE f1230_0_reverse_Load(EOS(STATIC_1230), o566[List.n]o566, o682[List.n]o566) -> f1274_0_reverse_Store(EOS(STATIC_1274), o566[List.n]o566, o682[List.n]o566) :|: TRUE f1274_0_reverse_Store(EOS(STATIC_1274), o566[List.n]o566, o682[List.n]o566) -> f1333_0_reverse_JMP(EOS(STATIC_1333), o566[List.n]o566, o682[List.n]o566) :|: TRUE f1333_0_reverse_JMP(EOS(STATIC_1333), o566[List.n]o566, o682[List.n]o566) -> f1380_0_reverse_Load(EOS(STATIC_1380), o566[List.n]o566, o682[List.n]o566) :|: TRUE f1380_0_reverse_Load(EOS(STATIC_1380), o566[List.n]o566, o682[List.n]o566) -> f1044_0_reverse_Load(EOS(STATIC_1044), o566[List.n]o566, o682[List.n]o566) :|: TRUE f1044_0_reverse_Load(EOS(STATIC_1044), o566[List.n]o566, o565[List.n]o566) -> f1059_0_reverse_NULL(EOS(STATIC_1059), o566[List.n]o566, o565[List.n]o566) :|: TRUE f1059_0_reverse_NULL(EOS(STATIC_1059), o566[List.n]o566, o565[List.n]o566) -> f1066_0_reverse_Load(EOS(STATIC_1066), o566[List.n]o566, o565[List.n]o566) :|: TRUE f1066_0_reverse_Load(EOS(STATIC_1066), o566[List.n]o566, o565[List.n]o566) -> f1083_0_reverse_Store(EOS(STATIC_1083), o566[List.n]o566, o565[List.n]o566) :|: TRUE f1083_0_reverse_Store(EOS(STATIC_1083), o566[List.n]o566, o565[List.n]o566) -> f1091_0_reverse_Load(EOS(STATIC_1091), o566[List.n]o566, o565[List.n]o566) :|: TRUE f1091_0_reverse_Load(EOS(STATIC_1091), o566[List.n]o566, o565[List.n]o566) -> f1094_0_reverse_FieldAccess(EOS(STATIC_1094), o566[List.n]o566, o565[List.n]o566) :|: TRUE f1094_0_reverse_FieldAccess(EOS(STATIC_1094), o566[List.n]o566, o565[List.n]o566) -> f1099_0_reverse_FieldAccess(EOS(STATIC_1099), o566[List.n]o566, o565[List.n]o566) :|: o566[List.n]o566 > 0 && o565[List.n]o566 > 0 Combined rules. Obtained 1 IRulesP rules: f1099_0_reverse_FieldAccess(EOS(STATIC_1099), o566[List.n]o566:0, o681[List.n]o566:0) -> f1099_0_reverse_FieldAccess(EOS(STATIC_1099), o566[List.n]o566:0, o682[List.n]o566:0) :|: o681[List.n]o566:0 > -1 && o682[List.n]o566:0 < o681[List.n]o566:0 && o566[List.n]o566:0 > 0 && o682[List.n]o566:0 > 0 Filtered constant ground arguments: f1099_0_reverse_FieldAccess(x1, x2, x3) -> f1099_0_reverse_FieldAccess(x2, x3) EOS(x1) -> EOS Finished conversion. Obtained 1 rules.P rules: f1099_0_reverse_FieldAccess(o566[List.n]o566:0, o681[List.n]o566:0) -> f1099_0_reverse_FieldAccess(o566[List.n]o566:0, o682[List.n]o566:0) :|: o682[List.n]o566:0 < o681[List.n]o566:0 && o681[List.n]o566:0 > -1 && o682[List.n]o566:0 > 0 && o566[List.n]o566:0 > 0 ---------------------------------------- (22) Obligation: Rules: f1099_0_reverse_FieldAccess(o566[List.n]o566:0, o681[List.n]o566:0) -> f1099_0_reverse_FieldAccess(o566[List.n]o566:0, o682[List.n]o566:0) :|: o682[List.n]o566:0 < o681[List.n]o566:0 && o681[List.n]o566:0 > -1 && o682[List.n]o566:0 > 0 && o566[List.n]o566:0 > 0 ---------------------------------------- (23) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (24) Obligation: Rules: f1099_0_reverse_FieldAccess(o566[List.n]o566:0, o681[List.n]o566:0) -> f1099_0_reverse_FieldAccess(o566[List.n]o566:0, o682[List.n]o566:0) :|: o682[List.n]o566:0 < o681[List.n]o566:0 && o681[List.n]o566:0 > -1 && o682[List.n]o566:0 > 0 && o566[List.n]o566:0 > 0 ---------------------------------------- (25) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f1099_0_reverse_FieldAccess(o566[List.n]o566:0, o681[List.n]o566:0) -> f1099_0_reverse_FieldAccess(o566[List.n]o566:0, o682[List.n]o566:0) :|: o682[List.n]o566:0 < o681[List.n]o566:0 && o681[List.n]o566:0 > -1 && o682[List.n]o566:0 > 0 && o566[List.n]o566:0 > 0 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (26) Obligation: Termination digraph: Nodes: (1) f1099_0_reverse_FieldAccess(o566[List.n]o566:0, o681[List.n]o566:0) -> f1099_0_reverse_FieldAccess(o566[List.n]o566:0, o682[List.n]o566:0) :|: o682[List.n]o566:0 < o681[List.n]o566:0 && o681[List.n]o566:0 > -1 && o682[List.n]o566:0 > 0 && o566[List.n]o566:0 > 0 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (27) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (28) Obligation: Rules: f1099_0_reverse_FieldAccess(o566[List.n]o566:0:0, o681[List.n]o566:0:0) -> f1099_0_reverse_FieldAccess(o566[List.n]o566:0:0, o682[List.n]o566:0:0) :|: o682[List.n]o566:0:0 > 0 && o566[List.n]o566:0:0 > 0 && o681[List.n]o566:0:0 > -1 && o682[List.n]o566:0:0 < o681[List.n]o566:0:0 ---------------------------------------- (29) FilterProof (EQUIVALENT) Used the following sort dictionary for filtering: f1099_0_reverse_FieldAccess(INTEGER, INTEGER) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (30) Obligation: Rules: f1099_0_reverse_FieldAccess(o566[List.n]o566:0:0, o681[List.n]o566:0:0) -> f1099_0_reverse_FieldAccess(o566[List.n]o566:0:0, o682[List.n]o566:0:0) :|: o682[List.n]o566:0:0 > 0 && o566[List.n]o566:0:0 > 0 && o681[List.n]o566:0:0 > -1 && o682[List.n]o566:0:0 < o681[List.n]o566:0:0 ---------------------------------------- (31) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (32) Obligation: Rules: f1099_0_reverse_FieldAccess(o566[List.n]o566:0:0:0, o681[List.n]o566:0:0:0) -> f1099_0_reverse_FieldAccess(o566[List.n]o566:0:0:0, o682[List.n]o566:0:0:0) :|: o681[List.n]o566:0:0:0 > -1 && o682[List.n]o566:0:0:0 < o681[List.n]o566:0:0:0 && o566[List.n]o566:0:0:0 > 0 && o682[List.n]o566:0:0:0 > 0 ---------------------------------------- (33) PolynomialOrderProcessor (EQUIVALENT) Found the following polynomial interpretation: [f1099_0_reverse_FieldAccess(x, x1)] = x1 The following rules are decreasing: f1099_0_reverse_FieldAccess(o566[List.n]o566:0:0:0, o681[List.n]o566:0:0:0) -> f1099_0_reverse_FieldAccess(o566[List.n]o566:0:0:0, o682[List.n]o566:0:0:0) :|: o681[List.n]o566:0:0:0 > -1 && o682[List.n]o566:0:0:0 < o681[List.n]o566:0:0:0 && o566[List.n]o566:0:0:0 > 0 && o682[List.n]o566:0:0:0 > 0 The following rules are bounded: f1099_0_reverse_FieldAccess(o566[List.n]o566:0:0:0, o681[List.n]o566:0:0:0) -> f1099_0_reverse_FieldAccess(o566[List.n]o566:0:0:0, o682[List.n]o566:0:0:0) :|: o681[List.n]o566:0:0:0 > -1 && o682[List.n]o566:0:0:0 < o681[List.n]o566:0:0:0 && o566[List.n]o566:0:0:0 > 0 && o682[List.n]o566: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: f467_0_createList_Load(EOS(STATIC_467), i42) -> f469_0_createList_LE(EOS(STATIC_469), i42, i42) :|: TRUE f469_0_createList_LE(EOS(STATIC_469), i44, i44) -> f471_0_createList_LE(EOS(STATIC_471), i44, i44) :|: TRUE f471_0_createList_LE(EOS(STATIC_471), i44, i44) -> f473_0_createList_New(EOS(STATIC_473), i44) :|: i44 > 0 f473_0_createList_New(EOS(STATIC_473), i44) -> f475_0_createList_Duplicate(EOS(STATIC_475), i44) :|: TRUE f475_0_createList_Duplicate(EOS(STATIC_475), i44) -> f478_0_createList_Load(EOS(STATIC_478), i44) :|: TRUE f478_0_createList_Load(EOS(STATIC_478), i44) -> f481_0_createList_InvokeMethod(EOS(STATIC_481), i44) :|: TRUE f481_0_createList_InvokeMethod(EOS(STATIC_481), i44) -> f484_0__init__Load(EOS(STATIC_484), i44) :|: TRUE f484_0__init__Load(EOS(STATIC_484), i44) -> f488_0__init__InvokeMethod(EOS(STATIC_488), i44) :|: TRUE f488_0__init__InvokeMethod(EOS(STATIC_488), i44) -> f502_0__init__Load(EOS(STATIC_502), i44) :|: TRUE f502_0__init__Load(EOS(STATIC_502), i44) -> f513_0__init__Load(EOS(STATIC_513), i44) :|: TRUE f513_0__init__Load(EOS(STATIC_513), i44) -> f521_0__init__FieldAccess(EOS(STATIC_521), i44) :|: TRUE f521_0__init__FieldAccess(EOS(STATIC_521), i44) -> f533_0__init__Return(EOS(STATIC_533), i44) :|: TRUE f533_0__init__Return(EOS(STATIC_533), i44) -> f538_0_createList_Store(EOS(STATIC_538), i44) :|: TRUE f538_0_createList_Store(EOS(STATIC_538), i44) -> f547_0_createList_JMP(EOS(STATIC_547), i44) :|: TRUE f547_0_createList_JMP(EOS(STATIC_547), i44) -> f579_0_createList_Inc(EOS(STATIC_579), i44) :|: TRUE f579_0_createList_Inc(EOS(STATIC_579), i44) -> f460_0_createList_Inc(EOS(STATIC_460), i44) :|: TRUE f460_0_createList_Inc(EOS(STATIC_460), i38) -> f467_0_createList_Load(EOS(STATIC_467), i38 + -1) :|: TRUE Combined rules. Obtained 1 IRulesP rules: f467_0_createList_Load(EOS(STATIC_467), i42:0) -> f467_0_createList_Load(EOS(STATIC_467), i42:0 - 1) :|: i42:0 > 0 Filtered constant ground arguments: f467_0_createList_Load(x1, x2) -> f467_0_createList_Load(x2) EOS(x1) -> EOS Finished conversion. Obtained 1 rules.P rules: f467_0_createList_Load(i42:0) -> f467_0_createList_Load(i42:0 - 1) :|: i42:0 > 0 ---------------------------------------- (37) Obligation: Rules: f467_0_createList_Load(i42:0) -> f467_0_createList_Load(i42:0 - 1) :|: i42:0 > 0 ---------------------------------------- (38) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (39) Obligation: Rules: f467_0_createList_Load(i42:0) -> f467_0_createList_Load(arith) :|: i42:0 > 0 && arith = i42:0 - 1 ---------------------------------------- (40) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f467_0_createList_Load(i42:0) -> f467_0_createList_Load(arith) :|: i42:0 > 0 && arith = i42:0 - 1 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (41) Obligation: Termination digraph: Nodes: (1) f467_0_createList_Load(i42:0) -> f467_0_createList_Load(arith) :|: i42:0 > 0 && arith = i42:0 - 1 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (42) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (43) Obligation: Rules: f467_0_createList_Load(i42:0:0) -> f467_0_createList_Load(i42:0:0 - 1) :|: i42:0:0 > 0 ---------------------------------------- (44) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f467_0_createList_Load(INTEGER) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (45) Obligation: Rules: f467_0_createList_Load(i42:0:0) -> f467_0_createList_Load(c) :|: c = i42:0:0 - 1 && i42:0:0 > 0 ---------------------------------------- (46) RankingReductionPairProof (EQUIVALENT) Interpretation: [ f467_0_createList_Load ] = f467_0_createList_Load_1 The following rules are decreasing: f467_0_createList_Load(i42:0:0) -> f467_0_createList_Load(c) :|: c = i42:0:0 - 1 && i42:0:0 > 0 The following rules are bounded: f467_0_createList_Load(i42:0:0) -> f467_0_createList_Load(c) :|: c = i42:0:0 - 1 && i42:0:0 > 0 ---------------------------------------- (47) YES