/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: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 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, 546 ms] (4) JBCTerminationGraph (5) TerminationGraphToSCCProof [SOUND, 0 ms] (6) AND (7) JBCTerminationSCC (8) SCCToIRSProof [SOUND, 153 ms] (9) IRSwT (10) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (11) IRSwT (12) IRSwTTerminationDigraphProof [EQUIVALENT, 3 ms] (13) IRSwT (14) IntTRSCompressionProof [EQUIVALENT, 0 ms] (15) IRSwT (16) IRSwTChainingProof [EQUIVALENT, 0 ms] (17) IRSwT (18) IRSwTTerminationDigraphProof [EQUIVALENT, 48 ms] (19) IRSwT (20) IntTRSCompressionProof [EQUIVALENT, 0 ms] (21) IRSwT (22) IRSwTChainingProof [EQUIVALENT, 0 ms] (23) IRSwT (24) IRSwTTerminationDigraphProof [EQUIVALENT, 12 ms] (25) IRSwT (26) IntTRSCompressionProof [EQUIVALENT, 0 ms] (27) IRSwT (28) TempFilterProof [SOUND, 1 ms] (29) IRSwT (30) IRSwTToQDPProof [SOUND, 0 ms] (31) QDP (32) QDPSizeChangeProof [EQUIVALENT, 0 ms] (33) YES (34) JBCTerminationSCC (35) SCCToIRSProof [SOUND, 79 ms] (36) IRSwT (37) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (38) IRSwT (39) IRSwTTerminationDigraphProof [EQUIVALENT, 9 ms] (40) IRSwT (41) IntTRSCompressionProof [EQUIVALENT, 0 ms] (42) IRSwT (43) TempFilterProof [SOUND, 22 ms] (44) IntTRS (45) PolynomialOrderProcessor [EQUIVALENT, 2 ms] (46) YES ---------------------------------------- (0) Obligation: need to prove termination of the following program: package AlternatingGrowReduceRec2; public class AlternatingGrowReduceRec2 { AlternatingGrowReduceRec2 next; public static void main(String[] argv) { Random.args = argv; AlternatingGrowReduceRec2 list = createList(Random.random()); growReduce(0, list); } public static void growReduce(int mode, AlternatingGrowReduceRec2 list) { if (list == null) return; if (mode == 0) { list = list.next; } else if (mode == 1) { list = new AlternatingGrowReduceRec2(list); } else if (mode > 1) { list = list.next; } mode++; if (mode > 2) { growReduce(0, list); } else { growReduce(mode, list); } } public AlternatingGrowReduceRec2(AlternatingGrowReduceRec2 old) { this.next = old; } public static AlternatingGrowReduceRec2 createList(int length) { AlternatingGrowReduceRec2 res = new AlternatingGrowReduceRec2(null); if (length > 1) { res.next = createList(length - 1); } return res; } } package AlternatingGrowReduceRec2; public class Random { static String[] args; static int index = 0; public static int random() { String string = args[index]; index++; return string.length(); } } ---------------------------------------- (1) BareJBCToJBCProof (EQUIVALENT) initialized classpath ---------------------------------------- (2) Obligation: need to prove termination of the following program: package AlternatingGrowReduceRec2; public class AlternatingGrowReduceRec2 { AlternatingGrowReduceRec2 next; public static void main(String[] argv) { Random.args = argv; AlternatingGrowReduceRec2 list = createList(Random.random()); growReduce(0, list); } public static void growReduce(int mode, AlternatingGrowReduceRec2 list) { if (list == null) return; if (mode == 0) { list = list.next; } else if (mode == 1) { list = new AlternatingGrowReduceRec2(list); } else if (mode > 1) { list = list.next; } mode++; if (mode > 2) { growReduce(0, list); } else { growReduce(mode, list); } } public AlternatingGrowReduceRec2(AlternatingGrowReduceRec2 old) { this.next = old; } public static AlternatingGrowReduceRec2 createList(int length) { AlternatingGrowReduceRec2 res = new AlternatingGrowReduceRec2(null); if (length > 1) { res.next = createList(length - 1); } return res; } } package AlternatingGrowReduceRec2; public class Random { static String[] args; static int index = 0; public static int random() { String string = args[index]; index++; return string.length(); } } ---------------------------------------- (3) JBCToGraph (EQUIVALENT) Constructed TerminationGraph. ---------------------------------------- (4) Obligation: Termination Graph based on JBC Program: AlternatingGrowReduceRec2.AlternatingGrowReduceRec2.main([Ljava/lang/String;)V: Graph of 121 nodes with 0 SCCs. AlternatingGrowReduceRec2.AlternatingGrowReduceRec2.createList(I)LAlternatingGrowReduceRec2/AlternatingGrowReduceRec2;: Graph of 34 nodes with 0 SCCs. AlternatingGrowReduceRec2.AlternatingGrowReduceRec2.growReduce(ILAlternatingGrowReduceRec2/AlternatingGrowReduceRec2;)V: Graph of 80 nodes with 0 SCCs. ---------------------------------------- (5) TerminationGraphToSCCProof (SOUND) Splitted TerminationGraph to 2 SCCss. ---------------------------------------- (6) Complex Obligation (AND) ---------------------------------------- (7) Obligation: SCC of termination graph based on JBC Program. SCC contains nodes from the following methods: AlternatingGrowReduceRec2.AlternatingGrowReduceRec2.growReduce(ILAlternatingGrowReduceRec2/AlternatingGrowReduceRec2;)V SCC calls the following helper methods: AlternatingGrowReduceRec2.AlternatingGrowReduceRec2.growReduce(ILAlternatingGrowReduceRec2/AlternatingGrowReduceRec2;)V Performed SCC analyses: *Used field analysis yielded the following read fields: *AlternatingGrowReduceRec2.AlternatingGrowReduceRec2: [next] *Marker field analysis yielded the following relations that could be markers: ---------------------------------------- (8) SCCToIRSProof (SOUND) Transformed FIGraph SCCs to intTRSs. Log: Generated rules. Obtained 68 IRulesP rules: f1585_0_growReduce_NONNULL(EOS(STATIC_1585), i150, i151, java.lang.Object(o236sub), java.lang.Object(o236sub)) -> f1587_0_growReduce_NONNULL(EOS(STATIC_1587), i150, i151, java.lang.Object(o236sub), java.lang.Object(o236sub)) :|: TRUE f1587_0_growReduce_NONNULL(EOS(STATIC_1587), i150, i151, java.lang.Object(o236sub), java.lang.Object(o236sub)) -> f1590_0_growReduce_Load(EOS(STATIC_1590), i150, i151, java.lang.Object(o236sub)) :|: TRUE f1590_0_growReduce_Load(EOS(STATIC_1590), i150, i151, java.lang.Object(o236sub)) -> f1594_0_growReduce_NE(EOS(STATIC_1594), i150, i151, java.lang.Object(o236sub), i151) :|: TRUE f1594_0_growReduce_NE(EOS(STATIC_1594), i150, i152, java.lang.Object(o236sub), i152) -> f1599_0_growReduce_NE(EOS(STATIC_1599), i150, i152, java.lang.Object(o236sub), i152) :|: TRUE f1594_0_growReduce_NE(EOS(STATIC_1594), i150, matching1, java.lang.Object(o236sub), matching2) -> f1600_0_growReduce_NE(EOS(STATIC_1600), i150, 0, java.lang.Object(o236sub), 0) :|: TRUE && matching1 = 0 && matching2 = 0 f1599_0_growReduce_NE(EOS(STATIC_1599), i150, i152, java.lang.Object(o236sub), i152) -> f1609_0_growReduce_Load(EOS(STATIC_1609), i150, i152, java.lang.Object(o236sub)) :|: i152 > 0 f1609_0_growReduce_Load(EOS(STATIC_1609), i150, i152, java.lang.Object(o236sub)) -> f1616_0_growReduce_ConstantStackPush(EOS(STATIC_1616), i150, i152, java.lang.Object(o236sub), i152) :|: TRUE f1616_0_growReduce_ConstantStackPush(EOS(STATIC_1616), i150, i152, java.lang.Object(o236sub), i152) -> f1618_0_growReduce_NE(EOS(STATIC_1618), i150, i152, java.lang.Object(o236sub), i152, 1) :|: TRUE f1618_0_growReduce_NE(EOS(STATIC_1618), i150, matching1, java.lang.Object(o236sub), matching2, matching3) -> f1626_0_growReduce_NE(EOS(STATIC_1626), i150, 1, java.lang.Object(o236sub), 1, 1) :|: i152 = 1 && matching1 = 1 && matching2 = 1 && matching3 = 1 f1618_0_growReduce_NE(EOS(STATIC_1618), i150, matching1, java.lang.Object(o236sub), matching2, matching3) -> f1627_0_growReduce_NE(EOS(STATIC_1627), i150, 2, java.lang.Object(o236sub), 2, 1) :|: i152 = 2 && matching1 = 2 && matching2 = 2 && matching3 = 1 f1626_0_growReduce_NE(EOS(STATIC_1626), i150, matching1, java.lang.Object(o236sub), matching2, matching3) -> f1639_0_growReduce_New(EOS(STATIC_1639), i150, 1, java.lang.Object(o236sub)) :|: TRUE && matching1 = 1 && matching2 = 1 && matching3 = 1 f1639_0_growReduce_New(EOS(STATIC_1639), i150, matching1, java.lang.Object(o236sub)) -> f1645_0_growReduce_Duplicate(EOS(STATIC_1645), i150, 1, java.lang.Object(o236sub), java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, NULL))) :|: TRUE && matching1 = 1 f1645_0_growReduce_Duplicate(EOS(STATIC_1645), i150, matching1, java.lang.Object(o236sub), java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, NULL))) -> f1648_0_growReduce_Load(EOS(STATIC_1648), i150, 1, java.lang.Object(o236sub), java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, NULL)), java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, NULL))) :|: TRUE && matching1 = 1 f1648_0_growReduce_Load(EOS(STATIC_1648), i150, matching1, java.lang.Object(o236sub), java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, NULL)), java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, NULL))) -> f1655_0_growReduce_InvokeMethod(EOS(STATIC_1655), i150, 1, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, NULL)), java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, NULL)), java.lang.Object(o236sub)) :|: TRUE && matching1 = 1 f1655_0_growReduce_InvokeMethod(EOS(STATIC_1655), i150, matching1, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, NULL)), java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, NULL)), java.lang.Object(o236sub)) -> f1667_0__init__Load(EOS(STATIC_1667), i150, 1, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, NULL)), java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, NULL)), java.lang.Object(o236sub)) :|: TRUE && matching1 = 1 f1667_0__init__Load(EOS(STATIC_1667), i150, matching1, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, NULL)), java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, NULL)), java.lang.Object(o236sub)) -> f1676_0__init__InvokeMethod(EOS(STATIC_1676), i150, 1, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, NULL)), java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, NULL)), java.lang.Object(o236sub), java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, NULL))) :|: TRUE && matching1 = 1 f1676_0__init__InvokeMethod(EOS(STATIC_1676), i150, matching1, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, NULL)), java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, NULL)), java.lang.Object(o236sub), java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, NULL))) -> f1680_0__init__Load(EOS(STATIC_1680), i150, 1, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, NULL)), java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, NULL)), java.lang.Object(o236sub)) :|: TRUE && matching1 = 1 f1680_0__init__Load(EOS(STATIC_1680), i150, matching1, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, NULL)), java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, NULL)), java.lang.Object(o236sub)) -> f1688_0__init__Load(EOS(STATIC_1688), i150, 1, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, NULL)), java.lang.Object(o236sub), java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, NULL))) :|: TRUE && matching1 = 1 f1688_0__init__Load(EOS(STATIC_1688), i150, matching1, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, NULL)), java.lang.Object(o236sub), java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, NULL))) -> f1693_0__init__FieldAccess(EOS(STATIC_1693), i150, 1, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, NULL)), java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, NULL)), java.lang.Object(o236sub)) :|: TRUE && matching1 = 1 f1693_0__init__FieldAccess(EOS(STATIC_1693), i150, matching1, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, NULL)), java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, NULL)), java.lang.Object(o236sub)) -> f1697_0__init__Return(EOS(STATIC_1697), i150, 1, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, java.lang.Object(o236sub)))) :|: TRUE && matching1 = 1 f1697_0__init__Return(EOS(STATIC_1697), i150, matching1, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, java.lang.Object(o236sub)))) -> f1702_0_growReduce_Store(EOS(STATIC_1702), i150, 1, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, java.lang.Object(o236sub)))) :|: TRUE && matching1 = 1 f1702_0_growReduce_Store(EOS(STATIC_1702), i150, matching1, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, java.lang.Object(o236sub)))) -> f1711_0_growReduce_JMP(EOS(STATIC_1711), i150, 1, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, java.lang.Object(o236sub)))) :|: TRUE && matching1 = 1 f1711_0_growReduce_JMP(EOS(STATIC_1711), i150, matching1, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, java.lang.Object(o236sub)))) -> f1737_0_growReduce_Inc(EOS(STATIC_1737), i150, 1, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, java.lang.Object(o236sub)))) :|: TRUE && matching1 = 1 f1737_0_growReduce_Inc(EOS(STATIC_1737), i150, matching1, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, java.lang.Object(o236sub)))) -> f1899_0_growReduce_Load(EOS(STATIC_1899), i150, 2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, java.lang.Object(o236sub)))) :|: TRUE && matching1 = 1 f1899_0_growReduce_Load(EOS(STATIC_1899), i150, matching1, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, java.lang.Object(o236sub)))) -> f1905_0_growReduce_ConstantStackPush(EOS(STATIC_1905), i150, 2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, java.lang.Object(o236sub))), 2) :|: TRUE && matching1 = 2 f1905_0_growReduce_ConstantStackPush(EOS(STATIC_1905), i150, matching1, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, java.lang.Object(o236sub))), matching2) -> f1920_0_growReduce_LE(EOS(STATIC_1920), i150, 2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, java.lang.Object(o236sub))), 2, 2) :|: TRUE && matching1 = 2 && matching2 = 2 f1920_0_growReduce_LE(EOS(STATIC_1920), i150, matching1, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, java.lang.Object(o236sub))), matching2, matching3) -> f1936_0_growReduce_Load(EOS(STATIC_1936), i150, 2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, java.lang.Object(o236sub)))) :|: TRUE && matching1 = 2 && matching2 = 2 && matching3 = 2 f1936_0_growReduce_Load(EOS(STATIC_1936), i150, matching1, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, java.lang.Object(o236sub)))) -> f1943_0_growReduce_Load(EOS(STATIC_1943), i150, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, java.lang.Object(o236sub))), 2) :|: TRUE && matching1 = 2 f1943_0_growReduce_Load(EOS(STATIC_1943), i150, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, java.lang.Object(o236sub))), matching1) -> f1983_0_growReduce_InvokeMethod(EOS(STATIC_1983), i150, 2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, java.lang.Object(o236sub)))) :|: TRUE && matching1 = 2 f1983_0_growReduce_InvokeMethod(EOS(STATIC_1983), i150, matching1, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, java.lang.Object(o236sub)))) -> f2252_0_growReduce_Load(EOS(STATIC_2252), 2, 2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, java.lang.Object(o236sub)))) :|: i118 >= 1 && matching1 = 2 f1983_0_growReduce_InvokeMethod(EOS(STATIC_1983), i150, matching1, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, java.lang.Object(o236sub)))) -> f2252_1_growReduce_Load(EOS(STATIC_2252), i150, 2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, java.lang.Object(o236sub)))) :|: i118 >= 1 && matching1 = 2 f2252_0_growReduce_Load(EOS(STATIC_2252), matching1, matching2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, java.lang.Object(o236sub)))) -> f2255_0_growReduce_Load(EOS(STATIC_2255), 2, 2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, java.lang.Object(o236sub)))) :|: TRUE && matching1 = 2 && matching2 = 2 f2255_0_growReduce_Load(EOS(STATIC_2255), matching1, matching2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, java.lang.Object(o236sub)))) -> f1573_0_growReduce_Load(EOS(STATIC_1573), 2, 2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, java.lang.Object(o236sub)))) :|: TRUE && matching1 = 2 && matching2 = 2 f1573_0_growReduce_Load(EOS(STATIC_1573), i150, i151, o234) -> f1585_0_growReduce_NONNULL(EOS(STATIC_1585), i150, i151, o234, o234) :|: TRUE f1627_0_growReduce_NE(EOS(STATIC_1627), i150, matching1, java.lang.Object(o236sub), matching2, matching3) -> f1642_0_growReduce_Load(EOS(STATIC_1642), i150, 2, java.lang.Object(o236sub)) :|: TRUE && matching1 = 2 && matching2 = 2 && matching3 = 1 f1642_0_growReduce_Load(EOS(STATIC_1642), i150, matching1, java.lang.Object(o236sub)) -> f1646_0_growReduce_ConstantStackPush(EOS(STATIC_1646), i150, 2, java.lang.Object(o236sub), 2) :|: TRUE && matching1 = 2 f1646_0_growReduce_ConstantStackPush(EOS(STATIC_1646), i150, matching1, java.lang.Object(o236sub), matching2) -> f1651_0_growReduce_LE(EOS(STATIC_1651), i150, 2, java.lang.Object(o236sub), 2) :|: TRUE && matching1 = 2 && matching2 = 2 f1651_0_growReduce_LE(EOS(STATIC_1651), i150, matching1, java.lang.Object(o236sub), matching2) -> f1663_0_growReduce_Load(EOS(STATIC_1663), i150, 2, java.lang.Object(o236sub)) :|: TRUE && matching1 = 2 && matching2 = 2 f1663_0_growReduce_Load(EOS(STATIC_1663), i150, matching1, java.lang.Object(o236sub)) -> f1669_0_growReduce_FieldAccess(EOS(STATIC_1669), i150, 2, java.lang.Object(o236sub)) :|: TRUE && matching1 = 2 f1669_0_growReduce_FieldAccess(EOS(STATIC_1669), i150, matching1, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, o244))) -> f1672_0_growReduce_FieldAccess(EOS(STATIC_1672), i150, 2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, o244))) :|: TRUE && matching1 = 2 f1672_0_growReduce_FieldAccess(EOS(STATIC_1672), i150, matching1, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, o244))) -> f1678_0_growReduce_Store(EOS(STATIC_1678), i150, 2, o244) :|: TRUE && matching1 = 2 f1678_0_growReduce_Store(EOS(STATIC_1678), i150, matching1, o244) -> f1683_0_growReduce_Inc(EOS(STATIC_1683), i150, 2, o244) :|: TRUE && matching1 = 2 f1683_0_growReduce_Inc(EOS(STATIC_1683), i150, matching1, o244) -> f1691_0_growReduce_Load(EOS(STATIC_1691), i150, o244) :|: TRUE && matching1 = 2 f1691_0_growReduce_Load(EOS(STATIC_1691), i150, o244) -> f1695_0_growReduce_ConstantStackPush(EOS(STATIC_1695), i150, o244) :|: TRUE f1695_0_growReduce_ConstantStackPush(EOS(STATIC_1695), i150, o244) -> f1700_0_growReduce_LE(EOS(STATIC_1700), i150, o244) :|: TRUE f1700_0_growReduce_LE(EOS(STATIC_1700), i150, o244) -> f1710_0_growReduce_ConstantStackPush(EOS(STATIC_1710), i150, o244) :|: TRUE f1710_0_growReduce_ConstantStackPush(EOS(STATIC_1710), i150, o244) -> f1712_0_growReduce_Load(EOS(STATIC_1712), i150, o244, 0) :|: TRUE f1712_0_growReduce_Load(EOS(STATIC_1712), i150, o244, matching1) -> f1739_0_growReduce_InvokeMethod(EOS(STATIC_1739), i150, 0, o244) :|: TRUE && matching1 = 0 f1739_0_growReduce_InvokeMethod(EOS(STATIC_1739), i150, matching1, o244) -> f1901_0_growReduce_Load(EOS(STATIC_1901), 0, 0, o244) :|: i118 >= 1 && matching1 = 0 f1739_0_growReduce_InvokeMethod(EOS(STATIC_1739), i150, matching1, o244) -> f1901_1_growReduce_Load(EOS(STATIC_1901), i150, 0, o244) :|: i118 >= 1 && matching1 = 0 f1901_0_growReduce_Load(EOS(STATIC_1901), matching1, matching2, o244) -> f1907_0_growReduce_Load(EOS(STATIC_1907), 0, 0, o244) :|: TRUE && matching1 = 0 && matching2 = 0 f1907_0_growReduce_Load(EOS(STATIC_1907), matching1, matching2, o244) -> f1573_0_growReduce_Load(EOS(STATIC_1573), 0, 0, o244) :|: TRUE && matching1 = 0 && matching2 = 0 f1600_0_growReduce_NE(EOS(STATIC_1600), i150, matching1, java.lang.Object(o236sub), matching2) -> f1611_0_growReduce_Load(EOS(STATIC_1611), i150, 0, java.lang.Object(o236sub)) :|: TRUE && matching1 = 0 && matching2 = 0 f1611_0_growReduce_Load(EOS(STATIC_1611), i150, matching1, java.lang.Object(o236sub)) -> f1617_0_growReduce_FieldAccess(EOS(STATIC_1617), i150, 0, java.lang.Object(o236sub)) :|: TRUE && matching1 = 0 f1617_0_growReduce_FieldAccess(EOS(STATIC_1617), i150, matching1, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, o241))) -> f1621_0_growReduce_FieldAccess(EOS(STATIC_1621), i150, 0, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, o241))) :|: TRUE && matching1 = 0 f1621_0_growReduce_FieldAccess(EOS(STATIC_1621), i150, matching1, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, o241))) -> f1629_0_growReduce_Store(EOS(STATIC_1629), i150, 0, o241) :|: TRUE && matching1 = 0 f1629_0_growReduce_Store(EOS(STATIC_1629), i150, matching1, o241) -> f1644_0_growReduce_JMP(EOS(STATIC_1644), i150, 0, o241) :|: TRUE && matching1 = 0 f1644_0_growReduce_JMP(EOS(STATIC_1644), i150, matching1, o241) -> f1647_0_growReduce_Inc(EOS(STATIC_1647), i150, 0, o241) :|: TRUE && matching1 = 0 f1647_0_growReduce_Inc(EOS(STATIC_1647), i150, matching1, o241) -> f1653_0_growReduce_Load(EOS(STATIC_1653), i150, 1, o241) :|: TRUE && matching1 = 0 f1653_0_growReduce_Load(EOS(STATIC_1653), i150, matching1, o241) -> f1665_0_growReduce_ConstantStackPush(EOS(STATIC_1665), i150, 1, o241, 1) :|: TRUE && matching1 = 1 f1665_0_growReduce_ConstantStackPush(EOS(STATIC_1665), i150, matching1, o241, matching2) -> f1671_0_growReduce_LE(EOS(STATIC_1671), i150, 1, o241, 1) :|: TRUE && matching1 = 1 && matching2 = 1 f1671_0_growReduce_LE(EOS(STATIC_1671), i150, matching1, o241, matching2) -> f1674_0_growReduce_Load(EOS(STATIC_1674), i150, 1, o241) :|: TRUE && matching1 = 1 && matching2 = 1 f1674_0_growReduce_Load(EOS(STATIC_1674), i150, matching1, o241) -> f1679_0_growReduce_Load(EOS(STATIC_1679), i150, o241, 1) :|: TRUE && matching1 = 1 f1679_0_growReduce_Load(EOS(STATIC_1679), i150, o241, matching1) -> f1685_0_growReduce_InvokeMethod(EOS(STATIC_1685), i150, 1, o241) :|: TRUE && matching1 = 1 f1685_0_growReduce_InvokeMethod(EOS(STATIC_1685), i150, matching1, o241) -> f1692_0_growReduce_Load(EOS(STATIC_1692), 1, 1, o241) :|: i118 >= 1 && matching1 = 1 f1685_0_growReduce_InvokeMethod(EOS(STATIC_1685), i150, matching1, o241) -> f1692_1_growReduce_Load(EOS(STATIC_1692), i150, 1, o241) :|: i118 >= 1 && matching1 = 1 f1692_0_growReduce_Load(EOS(STATIC_1692), matching1, matching2, o241) -> f1696_0_growReduce_Load(EOS(STATIC_1696), 1, 1, o241) :|: TRUE && matching1 = 1 && matching2 = 1 f1696_0_growReduce_Load(EOS(STATIC_1696), matching1, matching2, o241) -> f1573_0_growReduce_Load(EOS(STATIC_1573), 1, 1, o241) :|: TRUE && matching1 = 1 && matching2 = 1 Combined rules. Obtained 6 IRulesP rules: f1585_0_growReduce_NONNULL(EOS(STATIC_1585), i150:0, 1, java.lang.Object(o236sub:0), java.lang.Object(o236sub:0)) -> f1585_0_growReduce_NONNULL(EOS(STATIC_1585), 2, 2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, java.lang.Object(o236sub:0))), java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, java.lang.Object(o236sub:0)))) :|: i118:0 > 0 f1585_0_growReduce_NONNULL(EOS(STATIC_1585), i150:0, 2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, o244:0)), java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, o244:0))) -> f1585_0_growReduce_NONNULL(EOS(STATIC_1585), 0, 0, o244:0, o244:0) :|: i118:0 > 0 f1585_0_growReduce_NONNULL(EOS(STATIC_1585), i150:0, 0, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, o241:0)), java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, o241:0))) -> f1585_0_growReduce_NONNULL(EOS(STATIC_1585), 1, 1, o241:0, o241:0) :|: i118:0 > 0 Removed following non-SCC rules: f1585_0_growReduce_NONNULL(EOS(STATIC_1585), i150:0, 1, java.lang.Object(o236sub:0), java.lang.Object(o236sub:0)) -> f2252_1_growReduce_Load(EOS(STATIC_2252), i150:0, 2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, java.lang.Object(o236sub:0)))) :|: i118:0 > 0 f1585_0_growReduce_NONNULL(EOS(STATIC_1585), i150:0, 0, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, o241:0)), java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, o241:0))) -> f1692_1_growReduce_Load(EOS(STATIC_1692), i150:0, 1, o241:0) :|: i118:0 > 0 f1585_0_growReduce_NONNULL(EOS(STATIC_1585), i150:0, 2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, o244:0)), java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(EOC, o244:0))) -> f1901_1_growReduce_Load(EOS(STATIC_1901), i150:0, 0, o244:0) :|: i118:0 > 0 Filtered constant ground arguments: f1585_0_growReduce_NONNULL(x1, x2, x3, x4, x5) -> f1585_0_growReduce_NONNULL(x2, x3, x4, x5) EOS(x1) -> EOS AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(x1, x2) -> AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(x2) Filtered duplicate arguments: f1585_0_growReduce_NONNULL(x1, x2, x3, x4) -> f1585_0_growReduce_NONNULL(x1, x2, x4) Filtered unneeded arguments: f1585_0_growReduce_NONNULL(x1, x2, x3) -> f1585_0_growReduce_NONNULL(x2, x3) Finished conversion. Obtained 3 rules.P rules: f1585_0_growReduce_NONNULL(cons_1, java.lang.Object(o236sub:0)) -> f1585_0_growReduce_NONNULL(2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(java.lang.Object(o236sub:0)))) :|: TRUE && cons_1 = 1 f1585_0_growReduce_NONNULL(cons_2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(o244:0))) -> f1585_0_growReduce_NONNULL(0, o244:0) :|: TRUE && cons_2 = 2 f1585_0_growReduce_NONNULL(cons_0, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(o241:0))) -> f1585_0_growReduce_NONNULL(1, o241:0) :|: TRUE && cons_0 = 0 ---------------------------------------- (9) Obligation: Rules: f1585_0_growReduce_NONNULL(cons_1, java.lang.Object(o236sub:0)) -> f1585_0_growReduce_NONNULL(2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(java.lang.Object(o236sub:0)))) :|: TRUE && cons_1 = 1 f1585_0_growReduce_NONNULL(cons_2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(o244:0))) -> f1585_0_growReduce_NONNULL(0, o244:0) :|: TRUE && cons_2 = 2 f1585_0_growReduce_NONNULL(cons_0, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(o241:0))) -> f1585_0_growReduce_NONNULL(1, o241:0) :|: TRUE && cons_0 = 0 ---------------------------------------- (10) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (11) Obligation: Rules: f1585_0_growReduce_NONNULL(cons_1, java.lang.Object(o236sub:0)) -> f1585_0_growReduce_NONNULL(2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(java.lang.Object(o236sub:0)))) :|: TRUE && cons_1 = 1 f1585_0_growReduce_NONNULL(cons_2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(o244:0))) -> f1585_0_growReduce_NONNULL(0, o244:0) :|: TRUE && cons_2 = 2 f1585_0_growReduce_NONNULL(cons_0, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(o241:0))) -> f1585_0_growReduce_NONNULL(1, o241:0) :|: TRUE && cons_0 = 0 ---------------------------------------- (12) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f1585_0_growReduce_NONNULL(cons_1, java.lang.Object(o236sub:0)) -> f1585_0_growReduce_NONNULL(2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(java.lang.Object(o236sub:0)))) :|: TRUE && cons_1 = 1 (2) f1585_0_growReduce_NONNULL(cons_2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(o244:0))) -> f1585_0_growReduce_NONNULL(0, o244:0) :|: TRUE && cons_2 = 2 (3) f1585_0_growReduce_NONNULL(cons_0, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(o241:0))) -> f1585_0_growReduce_NONNULL(1, o241:0) :|: TRUE && cons_0 = 0 Arcs: (1) -> (2) (2) -> (3) (3) -> (1) This digraph is fully evaluated! ---------------------------------------- (13) Obligation: Termination digraph: Nodes: (1) f1585_0_growReduce_NONNULL(cons_1, java.lang.Object(o236sub:0)) -> f1585_0_growReduce_NONNULL(2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(java.lang.Object(o236sub:0)))) :|: TRUE && cons_1 = 1 (2) f1585_0_growReduce_NONNULL(cons_0, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(o241:0))) -> f1585_0_growReduce_NONNULL(1, o241:0) :|: TRUE && cons_0 = 0 (3) f1585_0_growReduce_NONNULL(cons_2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(o244:0))) -> f1585_0_growReduce_NONNULL(0, o244:0) :|: TRUE && cons_2 = 2 Arcs: (1) -> (3) (2) -> (1) (3) -> (2) This digraph is fully evaluated! ---------------------------------------- (14) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (15) Obligation: Rules: f1585_0_growReduce_NONNULL(cons_2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(o244:0:0))) -> f1585_0_growReduce_NONNULL(0, o244:0:0) :|: TRUE && cons_2 = 2 f1585_0_growReduce_NONNULL(cons_0, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(o241:0:0))) -> f1585_0_growReduce_NONNULL(1, o241:0:0) :|: TRUE && cons_0 = 0 f1585_0_growReduce_NONNULL(cons_1, java.lang.Object(o236sub:0:0)) -> f1585_0_growReduce_NONNULL(2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(java.lang.Object(o236sub:0:0)))) :|: TRUE && cons_1 = 1 ---------------------------------------- (16) IRSwTChainingProof (EQUIVALENT) Chaining! ---------------------------------------- (17) Obligation: Rules: f1585_0_growReduce_NONNULL(x, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(x3))))) -> f1585_0_growReduce_NONNULL(0, x3) :|: TRUE && x = 2 && 0 = 1 f1585_0_growReduce_NONNULL(cons_0, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(o241:0:0))) -> f1585_0_growReduce_NONNULL(1, o241:0:0) :|: TRUE && cons_0 = 0 f1585_0_growReduce_NONNULL(x4, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(x7))))) -> f1585_0_growReduce_NONNULL(1, x7) :|: TRUE && x4 = 2 f1585_0_growReduce_NONNULL(cons_1, java.lang.Object(o236sub:0:0)) -> f1585_0_growReduce_NONNULL(2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(java.lang.Object(o236sub:0:0)))) :|: TRUE && cons_1 = 1 f1585_0_growReduce_NONNULL(x8, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(java.lang.Object(x11)))) -> f1585_0_growReduce_NONNULL(2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(java.lang.Object(x11)))) :|: TRUE && x8 = 2 && 0 = 1 ---------------------------------------- (18) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f1585_0_growReduce_NONNULL(x, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(x3))))) -> f1585_0_growReduce_NONNULL(0, x3) :|: TRUE && x = 2 && 0 = 1 (2) f1585_0_growReduce_NONNULL(cons_0, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(o241:0:0))) -> f1585_0_growReduce_NONNULL(1, o241:0:0) :|: TRUE && cons_0 = 0 (3) f1585_0_growReduce_NONNULL(x4, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(x7))))) -> f1585_0_growReduce_NONNULL(1, x7) :|: TRUE && x4 = 2 (4) f1585_0_growReduce_NONNULL(cons_1, java.lang.Object(o236sub:0:0)) -> f1585_0_growReduce_NONNULL(2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(java.lang.Object(o236sub:0:0)))) :|: TRUE && cons_1 = 1 (5) f1585_0_growReduce_NONNULL(x8, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(java.lang.Object(x11)))) -> f1585_0_growReduce_NONNULL(2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(java.lang.Object(x11)))) :|: TRUE && x8 = 2 && 0 = 1 Arcs: (2) -> (4) (3) -> (4) (4) -> (3) This digraph is fully evaluated! ---------------------------------------- (19) Obligation: Termination digraph: Nodes: (1) f1585_0_growReduce_NONNULL(cons_1, java.lang.Object(o236sub:0:0)) -> f1585_0_growReduce_NONNULL(2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(java.lang.Object(o236sub:0:0)))) :|: TRUE && cons_1 = 1 (2) f1585_0_growReduce_NONNULL(x4, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(x7))))) -> f1585_0_growReduce_NONNULL(1, x7) :|: TRUE && x4 = 2 Arcs: (1) -> (2) (2) -> (1) This digraph is fully evaluated! ---------------------------------------- (20) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (21) Obligation: Rules: f1585_0_growReduce_NONNULL(cons_1, java.lang.Object(o236sub:0:0:0)) -> f1585_0_growReduce_NONNULL(2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(java.lang.Object(o236sub:0:0:0)))) :|: TRUE && cons_1 = 1 f1585_0_growReduce_NONNULL(cons_2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(x7:0))))) -> f1585_0_growReduce_NONNULL(1, x7:0) :|: TRUE && cons_2 = 2 ---------------------------------------- (22) IRSwTChainingProof (EQUIVALENT) Chaining! ---------------------------------------- (23) Obligation: Rules: f1585_0_growReduce_NONNULL(x, java.lang.Object(x1)) -> f1585_0_growReduce_NONNULL(2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(java.lang.Object(x1)))))) :|: TRUE && x = 1 && 0 = -1 f1585_0_growReduce_NONNULL(cons_2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(x7:0))))) -> f1585_0_growReduce_NONNULL(1, x7:0) :|: TRUE && cons_2 = 2 f1585_0_growReduce_NONNULL(x4, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(x7))) -> f1585_0_growReduce_NONNULL(1, x7) :|: TRUE && x4 = 1 ---------------------------------------- (24) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f1585_0_growReduce_NONNULL(x, java.lang.Object(x1)) -> f1585_0_growReduce_NONNULL(2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(java.lang.Object(x1)))))) :|: TRUE && x = 1 && 0 = -1 (2) f1585_0_growReduce_NONNULL(cons_2, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(x7:0))))) -> f1585_0_growReduce_NONNULL(1, x7:0) :|: TRUE && cons_2 = 2 (3) f1585_0_growReduce_NONNULL(x4, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(x7))) -> f1585_0_growReduce_NONNULL(1, x7) :|: TRUE && x4 = 1 Arcs: (2) -> (3) (3) -> (3) This digraph is fully evaluated! ---------------------------------------- (25) Obligation: Termination digraph: Nodes: (1) f1585_0_growReduce_NONNULL(x4, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(x7))) -> f1585_0_growReduce_NONNULL(1, x7) :|: TRUE && x4 = 1 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (26) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (27) Obligation: Rules: f1585_0_growReduce_NONNULL(cons_1, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(x7:0))) -> f1585_0_growReduce_NONNULL(1, x7:0) :|: TRUE && cons_1 = 1 ---------------------------------------- (28) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f1585_0_growReduce_NONNULL(VARIABLE, VARIABLE) java.lang.Object(VARIABLE) AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(VARIABLE) Removed predefined arithmetic. ---------------------------------------- (29) Obligation: Rules: f1585_0_growReduce_NONNULL(predef, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(x7:0))) -> f1585_0_growReduce_NONNULL(predef, x7:0) ---------------------------------------- (30) IRSwTToQDPProof (SOUND) Removed the integers and created a QDP-Problem. ---------------------------------------- (31) Obligation: Q DP problem: The TRS P consists of the following rules: f1585_0_growReduce_NONNULL(predef, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(x7:0))) -> f1585_0_growReduce_NONNULL(predef, x7:0) R is empty. Q is empty. We have to consider all (P,Q,R)-chains. ---------------------------------------- (32) 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: *f1585_0_growReduce_NONNULL(predef, java.lang.Object(AlternatingGrowReduceRec2.AlternatingGrowReduceRec2(x7:0))) -> f1585_0_growReduce_NONNULL(predef, x7:0) The graph contains the following edges 1 >= 1, 2 > 2 ---------------------------------------- (33) YES ---------------------------------------- (34) Obligation: SCC of termination graph based on JBC Program. SCC contains nodes from the following methods: AlternatingGrowReduceRec2.AlternatingGrowReduceRec2.createList(I)LAlternatingGrowReduceRec2/AlternatingGrowReduceRec2; SCC calls the following helper methods: AlternatingGrowReduceRec2.AlternatingGrowReduceRec2.createList(I)LAlternatingGrowReduceRec2/AlternatingGrowReduceRec2; Performed SCC analyses: *Used field analysis yielded the following read fields: *Marker field analysis yielded the following relations that could be markers: ---------------------------------------- (35) SCCToIRSProof (SOUND) Transformed FIGraph SCCs to intTRSs. Log: Generated rules. Obtained 23 IRulesP rules: f187_0_createList_Duplicate(EOS(STATIC_187), i19, i19) -> f191_0_createList_ConstantStackPush(EOS(STATIC_191), i19, i19) :|: TRUE f191_0_createList_ConstantStackPush(EOS(STATIC_191), i19, i19) -> f195_0_createList_InvokeMethod(EOS(STATIC_195), i19, i19) :|: TRUE f195_0_createList_InvokeMethod(EOS(STATIC_195), i19, i19) -> f199_0__init__Load(EOS(STATIC_199), i19, i19) :|: TRUE f199_0__init__Load(EOS(STATIC_199), i19, i19) -> f206_0__init__InvokeMethod(EOS(STATIC_206), i19, i19) :|: TRUE f206_0__init__InvokeMethod(EOS(STATIC_206), i19, i19) -> f210_0__init__Load(EOS(STATIC_210), i19, i19) :|: TRUE f210_0__init__Load(EOS(STATIC_210), i19, i19) -> f213_0__init__Load(EOS(STATIC_213), i19, i19) :|: TRUE f213_0__init__Load(EOS(STATIC_213), i19, i19) -> f216_0__init__FieldAccess(EOS(STATIC_216), i19, i19) :|: TRUE f216_0__init__FieldAccess(EOS(STATIC_216), i19, i19) -> f218_0__init__Return(EOS(STATIC_218), i19, i19) :|: TRUE f218_0__init__Return(EOS(STATIC_218), i19, i19) -> f220_0_createList_Store(EOS(STATIC_220), i19, i19) :|: TRUE f220_0_createList_Store(EOS(STATIC_220), i19, i19) -> f222_0_createList_Load(EOS(STATIC_222), i19, i19) :|: TRUE f222_0_createList_Load(EOS(STATIC_222), i19, i19) -> f224_0_createList_ConstantStackPush(EOS(STATIC_224), i19, i19, i19) :|: TRUE f224_0_createList_ConstantStackPush(EOS(STATIC_224), i19, i19, i19) -> f225_0_createList_LE(EOS(STATIC_225), i19, i19, i19, 1) :|: TRUE f225_0_createList_LE(EOS(STATIC_225), i24, i24, i24, matching1) -> f229_0_createList_LE(EOS(STATIC_229), i24, i24, i24, 1) :|: TRUE && matching1 = 1 f229_0_createList_LE(EOS(STATIC_229), i24, i24, i24, matching1) -> f235_0_createList_Load(EOS(STATIC_235), i24, i24) :|: i24 > 1 && matching1 = 1 f235_0_createList_Load(EOS(STATIC_235), i24, i24) -> f239_0_createList_Load(EOS(STATIC_239), i24, i24) :|: TRUE f239_0_createList_Load(EOS(STATIC_239), i24, i24) -> f245_0_createList_ConstantStackPush(EOS(STATIC_245), i24, i24) :|: TRUE f245_0_createList_ConstantStackPush(EOS(STATIC_245), i24, i24) -> f281_0_createList_IntArithmetic(EOS(STATIC_281), i24, i24, 1) :|: TRUE f281_0_createList_IntArithmetic(EOS(STATIC_281), i24, i24, matching1) -> f285_0_createList_InvokeMethod(EOS(STATIC_285), i24, i24 - 1) :|: i24 > 0 && matching1 = 1 f285_0_createList_InvokeMethod(EOS(STATIC_285), i24, i33) -> f290_0_createList_New(EOS(STATIC_290), i33, i33) :|: i24 > 1 && i33 >= 1 && i10 >= 1 && i33 < i24 f285_0_createList_InvokeMethod(EOS(STATIC_285), i24, i33) -> f290_1_createList_New(EOS(STATIC_290), i24, i33) :|: i24 > 1 && i33 >= 1 && i10 >= 1 && i33 < i24 f290_0_createList_New(EOS(STATIC_290), i33, i33) -> f294_0_createList_New(EOS(STATIC_294), i33, i33) :|: TRUE f294_0_createList_New(EOS(STATIC_294), i33, i33) -> f182_0_createList_New(EOS(STATIC_182), i33, i33) :|: TRUE f182_0_createList_New(EOS(STATIC_182), i19, i19) -> f187_0_createList_Duplicate(EOS(STATIC_187), i19, i19) :|: TRUE Combined rules. Obtained 2 IRulesP rules: f187_0_createList_Duplicate(EOS(STATIC_187), i19:0, i19:0) -> f187_0_createList_Duplicate(EOS(STATIC_187), i19:0 - 1, i19:0 - 1) :|: i19:0 > 1 && i19:0 - 1 < i19:0 && i10:0 > 0 Removed following non-SCC rules: f187_0_createList_Duplicate(EOS(STATIC_187), i19:0, i19:0) -> f290_1_createList_New(EOS(STATIC_290), i19:0, i19:0 - 1) :|: i19:0 > 1 && i19:0 - 1 < i19:0 && i10:0 > 0 Filtered constant ground arguments: f187_0_createList_Duplicate(x1, x2, x3) -> f187_0_createList_Duplicate(x2, x3) EOS(x1) -> EOS Filtered duplicate arguments: f187_0_createList_Duplicate(x1, x2) -> f187_0_createList_Duplicate(x2) Finished conversion. Obtained 1 rules.P rules: f187_0_createList_Duplicate(i19:0) -> f187_0_createList_Duplicate(i19:0 - 1) :|: i19:0 - 1 < i19:0 && i10:0 > 0 && i19:0 > 1 ---------------------------------------- (36) Obligation: Rules: f187_0_createList_Duplicate(i19:0) -> f187_0_createList_Duplicate(i19:0 - 1) :|: i19:0 - 1 < i19:0 && i10:0 > 0 && i19:0 > 1 ---------------------------------------- (37) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (38) Obligation: Rules: f187_0_createList_Duplicate(i19:0) -> f187_0_createList_Duplicate(arith) :|: i19:0 - 1 < i19:0 && i10:0 > 0 && i19:0 > 1 && arith = i19:0 - 1 ---------------------------------------- (39) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f187_0_createList_Duplicate(i19:0) -> f187_0_createList_Duplicate(arith) :|: i19:0 - 1 < i19:0 && i10:0 > 0 && i19:0 > 1 && arith = i19:0 - 1 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (40) Obligation: Termination digraph: Nodes: (1) f187_0_createList_Duplicate(i19:0) -> f187_0_createList_Duplicate(arith) :|: i19:0 - 1 < i19:0 && i10:0 > 0 && i19:0 > 1 && arith = i19:0 - 1 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (41) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (42) Obligation: Rules: f187_0_createList_Duplicate(i19:0:0) -> f187_0_createList_Duplicate(i19:0:0 - 1) :|: i19:0:0 - 1 < i19:0:0 && i10:0:0 > 0 && i19:0:0 > 1 ---------------------------------------- (43) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f187_0_createList_Duplicate(INTEGER) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (44) Obligation: Rules: f187_0_createList_Duplicate(i19:0:0) -> f187_0_createList_Duplicate(c) :|: c = i19:0:0 - 1 && (i19:0:0 - 1 < i19:0:0 && i10:0:0 > 0 && i19:0:0 > 1) ---------------------------------------- (45) PolynomialOrderProcessor (EQUIVALENT) Found the following polynomial interpretation: [f187_0_createList_Duplicate(x)] = x The following rules are decreasing: f187_0_createList_Duplicate(i19:0:0) -> f187_0_createList_Duplicate(c) :|: c = i19:0:0 - 1 && (i19:0:0 - 1 < i19:0:0 && i10:0:0 > 0 && i19:0:0 > 1) The following rules are bounded: f187_0_createList_Duplicate(i19:0:0) -> f187_0_createList_Duplicate(c) :|: c = i19:0:0 - 1 && (i19:0:0 - 1 < i19:0:0 && i10:0:0 > 0 && i19:0:0 > 1) ---------------------------------------- (46) YES