/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: 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, 368 ms] (4) JBCTerminationGraph (5) TerminationGraphToSCCProof [SOUND, 0 ms] (6) AND (7) JBCTerminationSCC (8) SCCToIRSProof [SOUND, 70 ms] (9) IRSwT (10) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (11) IRSwT (12) IRSwTTerminationDigraphProof [EQUIVALENT, 0 ms] (13) IRSwT (14) IntTRSCompressionProof [EQUIVALENT, 0 ms] (15) IRSwT (16) TempFilterProof [SOUND, 23 ms] (17) IntTRS (18) RankingReductionPairProof [EQUIVALENT, 0 ms] (19) YES (20) JBCTerminationSCC (21) SCCToIRSProof [SOUND, 28 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) TempFilterProof [SOUND, 17 ms] (30) IntTRS (31) RankingReductionPairProof [EQUIVALENT, 0 ms] (32) YES (33) JBCTerminationSCC (34) SCCToIRSProof [SOUND, 27 ms] (35) IRSwT (36) IRSFormatTransformerProof [EQUIVALENT, 0 ms] (37) IRSwT (38) IRSwTTerminationDigraphProof [EQUIVALENT, 0 ms] (39) IRSwT (40) IntTRSCompressionProof [EQUIVALENT, 0 ms] (41) IRSwT (42) TempFilterProof [SOUND, 21 ms] (43) IntTRS (44) RankingReductionPairProof [EQUIVALENT, 0 ms] (45) YES ---------------------------------------- (0) Obligation: need to prove termination of the following program: package example_1; public class A { int incr(int i) { return i=i+1; } } package example_1; public class B extends A { int incr(int i) { return i = i+2; } } package example_1; public class C extends B { int incr(int i) { return i=i+3; } } package example_1; public class Test { public int add(int n,A o){ int res=0; int i=0; while (i<=n){ res=res+i; i=o.incr(i); } return res; } public static void main(String[] args) { int test = 1000; Test testClass = new Test(); A a = new A(); int result1 = testClass.add(test,a); a = new B(); int result2 = testClass.add(test,a); a = new C(); int result3 = testClass.add(test,a); // System.out.println("Result: "+result1 + result2 + result3); } } ---------------------------------------- (1) BareJBCToJBCProof (EQUIVALENT) initialized classpath ---------------------------------------- (2) Obligation: need to prove termination of the following program: package example_1; public class A { int incr(int i) { return i=i+1; } } package example_1; public class B extends A { int incr(int i) { return i = i+2; } } package example_1; public class C extends B { int incr(int i) { return i=i+3; } } package example_1; public class Test { public int add(int n,A o){ int res=0; int i=0; while (i<=n){ res=res+i; i=o.incr(i); } return res; } public static void main(String[] args) { int test = 1000; Test testClass = new Test(); A a = new A(); int result1 = testClass.add(test,a); a = new B(); int result2 = testClass.add(test,a); a = new C(); int result3 = testClass.add(test,a); // System.out.println("Result: "+result1 + result2 + result3); } } ---------------------------------------- (3) JBCToGraph (EQUIVALENT) Constructed TerminationGraph. ---------------------------------------- (4) Obligation: Termination Graph based on JBC Program: example_1.Test.main([Ljava/lang/String;)V: Graph of 146 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: example_1.Test.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: ---------------------------------------- (8) SCCToIRSProof (SOUND) Transformed FIGraph SCCs to intTRSs. Log: Generated rules. Obtained 20 IRulesP rules: f1806_0_add_Load(EOS(STATIC_1806), matching1, i59, i59) -> f1824_0_add_GT(EOS(STATIC_1824), 1000, i59, i59, 1000) :|: TRUE && matching1 = 1000 f1824_0_add_GT(EOS(STATIC_1824), matching1, i64, i64, matching2) -> f1833_0_add_GT(EOS(STATIC_1833), 1000, i64, i64, 1000) :|: TRUE && matching1 = 1000 && matching2 = 1000 f1833_0_add_GT(EOS(STATIC_1833), matching1, i64, i64, matching2) -> f1855_0_add_Load(EOS(STATIC_1855), 1000, i64) :|: i64 <= 1000 && matching1 = 1000 && matching2 = 1000 f1855_0_add_Load(EOS(STATIC_1855), matching1, i64) -> f1865_0_add_Load(EOS(STATIC_1865), 1000, i64) :|: TRUE && matching1 = 1000 f1865_0_add_Load(EOS(STATIC_1865), matching1, i64) -> f1870_0_add_IntArithmetic(EOS(STATIC_1870), 1000, i64, i64) :|: TRUE && matching1 = 1000 f1870_0_add_IntArithmetic(EOS(STATIC_1870), matching1, i64, i64) -> f1878_0_add_Store(EOS(STATIC_1878), 1000, i64) :|: i64 >= 0 && matching1 = 1000 f1878_0_add_Store(EOS(STATIC_1878), matching1, i64) -> f1883_0_add_Load(EOS(STATIC_1883), 1000, i64) :|: TRUE && matching1 = 1000 f1883_0_add_Load(EOS(STATIC_1883), matching1, i64) -> f1891_0_add_Load(EOS(STATIC_1891), 1000, i64) :|: TRUE && matching1 = 1000 f1891_0_add_Load(EOS(STATIC_1891), matching1, i64) -> f1892_0_add_InvokeMethod(EOS(STATIC_1892), 1000, i64) :|: TRUE && matching1 = 1000 f1892_0_add_InvokeMethod(EOS(STATIC_1892), matching1, i64) -> f1893_0_incr_Load(EOS(STATIC_1893), 1000, i64) :|: TRUE && matching1 = 1000 f1893_0_incr_Load(EOS(STATIC_1893), matching1, i64) -> f1896_0_incr_ConstantStackPush(EOS(STATIC_1896), 1000, i64) :|: TRUE && matching1 = 1000 f1896_0_incr_ConstantStackPush(EOS(STATIC_1896), matching1, i64) -> f1899_0_incr_IntArithmetic(EOS(STATIC_1899), 1000, i64, 3) :|: TRUE && matching1 = 1000 f1899_0_incr_IntArithmetic(EOS(STATIC_1899), matching1, i64, matching2) -> f1902_0_incr_Duplicate(EOS(STATIC_1902), 1000, i64 + 3) :|: i64 >= 0 && matching1 = 1000 && matching2 = 3 f1902_0_incr_Duplicate(EOS(STATIC_1902), matching1, i71) -> f1904_0_incr_Store(EOS(STATIC_1904), 1000, i71, i71) :|: TRUE && matching1 = 1000 f1904_0_incr_Store(EOS(STATIC_1904), matching1, i71, i71) -> f1907_0_incr_Return(EOS(STATIC_1907), 1000, i71) :|: TRUE && matching1 = 1000 f1907_0_incr_Return(EOS(STATIC_1907), matching1, i71) -> f1913_0_add_Store(EOS(STATIC_1913), 1000, i71) :|: TRUE && matching1 = 1000 f1913_0_add_Store(EOS(STATIC_1913), matching1, i71) -> f1918_0_add_JMP(EOS(STATIC_1918), 1000, i71) :|: TRUE && matching1 = 1000 f1918_0_add_JMP(EOS(STATIC_1918), matching1, i71) -> f1928_0_add_Load(EOS(STATIC_1928), 1000, i71) :|: TRUE && matching1 = 1000 f1928_0_add_Load(EOS(STATIC_1928), matching1, i71) -> f1804_0_add_Load(EOS(STATIC_1804), 1000, i71) :|: TRUE && matching1 = 1000 f1804_0_add_Load(EOS(STATIC_1804), matching1, i59) -> f1806_0_add_Load(EOS(STATIC_1806), 1000, i59, i59) :|: TRUE && matching1 = 1000 Combined rules. Obtained 1 IRulesP rules: f1806_0_add_Load(EOS(STATIC_1806), 1000, i59:0, i59:0) -> f1806_0_add_Load(EOS(STATIC_1806), 1000, i59:0 + 3, i59:0 + 3) :|: i59:0 < 1001 && i59:0 > -1 Filtered constant ground arguments: f1806_0_add_Load(x1, x2, x3, x4) -> f1806_0_add_Load(x3, x4) EOS(x1) -> EOS Filtered duplicate arguments: f1806_0_add_Load(x1, x2) -> f1806_0_add_Load(x2) Finished conversion. Obtained 1 rules.P rules: f1806_0_add_Load(i59:0) -> f1806_0_add_Load(i59:0 + 3) :|: i59:0 < 1001 && i59:0 > -1 ---------------------------------------- (9) Obligation: Rules: f1806_0_add_Load(i59:0) -> f1806_0_add_Load(i59:0 + 3) :|: i59:0 < 1001 && i59:0 > -1 ---------------------------------------- (10) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (11) Obligation: Rules: f1806_0_add_Load(i59:0) -> f1806_0_add_Load(arith) :|: i59:0 < 1001 && i59:0 > -1 && arith = i59:0 + 3 ---------------------------------------- (12) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f1806_0_add_Load(i59:0) -> f1806_0_add_Load(arith) :|: i59:0 < 1001 && i59:0 > -1 && arith = i59:0 + 3 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (13) Obligation: Termination digraph: Nodes: (1) f1806_0_add_Load(i59:0) -> f1806_0_add_Load(arith) :|: i59:0 < 1001 && i59:0 > -1 && arith = i59:0 + 3 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (14) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (15) Obligation: Rules: f1806_0_add_Load(i59:0:0) -> f1806_0_add_Load(i59:0:0 + 3) :|: i59:0:0 < 1001 && i59:0:0 > -1 ---------------------------------------- (16) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f1806_0_add_Load(INTEGER) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (17) Obligation: Rules: f1806_0_add_Load(i59:0:0) -> f1806_0_add_Load(c) :|: c = i59:0:0 + 3 && (i59:0:0 < 1001 && i59:0:0 > -1) ---------------------------------------- (18) RankingReductionPairProof (EQUIVALENT) Interpretation: [ f1806_0_add_Load ] = -1/3*f1806_0_add_Load_1 The following rules are decreasing: f1806_0_add_Load(i59:0:0) -> f1806_0_add_Load(c) :|: c = i59:0:0 + 3 && (i59:0:0 < 1001 && i59:0:0 > -1) The following rules are bounded: f1806_0_add_Load(i59:0:0) -> f1806_0_add_Load(c) :|: c = i59:0:0 + 3 && (i59:0:0 < 1001 && i59:0:0 > -1) ---------------------------------------- (19) YES ---------------------------------------- (20) Obligation: SCC of termination graph based on JBC Program. SCC contains nodes from the following methods: example_1.Test.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: ---------------------------------------- (21) SCCToIRSProof (SOUND) Transformed FIGraph SCCs to intTRSs. Log: Generated rules. Obtained 20 IRulesP rules: f1374_0_add_Load(EOS(STATIC_1374), matching1, matching2, i31, i31) -> f1391_0_add_GT(EOS(STATIC_1391), 1000, 1000, i31, i31, 1000) :|: TRUE && matching1 = 1000 && matching2 = 1000 f1391_0_add_GT(EOS(STATIC_1391), matching1, matching2, i36, i36, matching3) -> f1399_0_add_GT(EOS(STATIC_1399), 1000, 1000, i36, i36, 1000) :|: TRUE && matching1 = 1000 && matching2 = 1000 && matching3 = 1000 f1399_0_add_GT(EOS(STATIC_1399), matching1, matching2, i36, i36, matching3) -> f1419_0_add_Load(EOS(STATIC_1419), 1000, 1000, i36) :|: i36 <= 1000 && matching1 = 1000 && matching2 = 1000 && matching3 = 1000 f1419_0_add_Load(EOS(STATIC_1419), matching1, matching2, i36) -> f1422_0_add_Load(EOS(STATIC_1422), 1000, 1000, i36) :|: TRUE && matching1 = 1000 && matching2 = 1000 f1422_0_add_Load(EOS(STATIC_1422), matching1, matching2, i36) -> f1430_0_add_IntArithmetic(EOS(STATIC_1430), 1000, 1000, i36, i36) :|: TRUE && matching1 = 1000 && matching2 = 1000 f1430_0_add_IntArithmetic(EOS(STATIC_1430), matching1, matching2, i36, i36) -> f1436_0_add_Store(EOS(STATIC_1436), 1000, 1000, i36) :|: i36 >= 0 && matching1 = 1000 && matching2 = 1000 f1436_0_add_Store(EOS(STATIC_1436), matching1, matching2, i36) -> f1443_0_add_Load(EOS(STATIC_1443), 1000, 1000, i36) :|: TRUE && matching1 = 1000 && matching2 = 1000 f1443_0_add_Load(EOS(STATIC_1443), matching1, matching2, i36) -> f1447_0_add_Load(EOS(STATIC_1447), 1000, 1000, i36) :|: TRUE && matching1 = 1000 && matching2 = 1000 f1447_0_add_Load(EOS(STATIC_1447), matching1, matching2, i36) -> f1451_0_add_InvokeMethod(EOS(STATIC_1451), 1000, 1000, i36) :|: TRUE && matching1 = 1000 && matching2 = 1000 f1451_0_add_InvokeMethod(EOS(STATIC_1451), matching1, matching2, i36) -> f1454_0_incr_Load(EOS(STATIC_1454), 1000, 1000, i36) :|: TRUE && matching1 = 1000 && matching2 = 1000 f1454_0_incr_Load(EOS(STATIC_1454), matching1, matching2, i36) -> f1456_0_incr_ConstantStackPush(EOS(STATIC_1456), 1000, 1000, i36) :|: TRUE && matching1 = 1000 && matching2 = 1000 f1456_0_incr_ConstantStackPush(EOS(STATIC_1456), matching1, matching2, i36) -> f1458_0_incr_IntArithmetic(EOS(STATIC_1458), 1000, 1000, i36, 2) :|: TRUE && matching1 = 1000 && matching2 = 1000 f1458_0_incr_IntArithmetic(EOS(STATIC_1458), matching1, matching2, i36, matching3) -> f1459_0_incr_Duplicate(EOS(STATIC_1459), 1000, 1000, i36 + 2) :|: i36 >= 0 && matching1 = 1000 && matching2 = 1000 && matching3 = 2 f1459_0_incr_Duplicate(EOS(STATIC_1459), matching1, matching2, i41) -> f1461_0_incr_Store(EOS(STATIC_1461), 1000, 1000, i41, i41) :|: TRUE && matching1 = 1000 && matching2 = 1000 f1461_0_incr_Store(EOS(STATIC_1461), matching1, matching2, i41, i41) -> f1463_0_incr_Return(EOS(STATIC_1463), 1000, 1000, i41) :|: TRUE && matching1 = 1000 && matching2 = 1000 f1463_0_incr_Return(EOS(STATIC_1463), matching1, matching2, i41) -> f1464_0_add_Store(EOS(STATIC_1464), 1000, 1000, i41) :|: TRUE && matching1 = 1000 && matching2 = 1000 f1464_0_add_Store(EOS(STATIC_1464), matching1, matching2, i41) -> f1466_0_add_JMP(EOS(STATIC_1466), 1000, 1000, i41) :|: TRUE && matching1 = 1000 && matching2 = 1000 f1466_0_add_JMP(EOS(STATIC_1466), matching1, matching2, i41) -> f1468_0_add_Load(EOS(STATIC_1468), 1000, 1000, i41) :|: TRUE && matching1 = 1000 && matching2 = 1000 f1468_0_add_Load(EOS(STATIC_1468), matching1, matching2, i41) -> f1367_0_add_Load(EOS(STATIC_1367), 1000, 1000, i41) :|: TRUE && matching1 = 1000 && matching2 = 1000 f1367_0_add_Load(EOS(STATIC_1367), matching1, matching2, i31) -> f1374_0_add_Load(EOS(STATIC_1374), 1000, 1000, i31, i31) :|: TRUE && matching1 = 1000 && matching2 = 1000 Combined rules. Obtained 1 IRulesP rules: f1374_0_add_Load(EOS(STATIC_1374), 1000, 1000, i31:0, i31:0) -> f1374_0_add_Load(EOS(STATIC_1374), 1000, 1000, i31:0 + 2, i31:0 + 2) :|: i31:0 < 1001 && i31:0 > -1 Filtered constant ground arguments: f1374_0_add_Load(x1, x2, x3, x4, x5) -> f1374_0_add_Load(x4, x5) EOS(x1) -> EOS Filtered duplicate arguments: f1374_0_add_Load(x1, x2) -> f1374_0_add_Load(x2) Finished conversion. Obtained 1 rules.P rules: f1374_0_add_Load(i31:0) -> f1374_0_add_Load(i31:0 + 2) :|: i31:0 < 1001 && i31:0 > -1 ---------------------------------------- (22) Obligation: Rules: f1374_0_add_Load(i31:0) -> f1374_0_add_Load(i31:0 + 2) :|: i31:0 < 1001 && i31:0 > -1 ---------------------------------------- (23) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (24) Obligation: Rules: f1374_0_add_Load(i31:0) -> f1374_0_add_Load(arith) :|: i31:0 < 1001 && i31:0 > -1 && arith = i31:0 + 2 ---------------------------------------- (25) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f1374_0_add_Load(i31:0) -> f1374_0_add_Load(arith) :|: i31:0 < 1001 && i31:0 > -1 && arith = i31:0 + 2 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (26) Obligation: Termination digraph: Nodes: (1) f1374_0_add_Load(i31:0) -> f1374_0_add_Load(arith) :|: i31:0 < 1001 && i31:0 > -1 && arith = i31:0 + 2 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (27) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (28) Obligation: Rules: f1374_0_add_Load(i31:0:0) -> f1374_0_add_Load(i31:0:0 + 2) :|: i31:0:0 < 1001 && i31:0:0 > -1 ---------------------------------------- (29) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f1374_0_add_Load(INTEGER) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (30) Obligation: Rules: f1374_0_add_Load(i31:0:0) -> f1374_0_add_Load(c) :|: c = i31:0:0 + 2 && (i31:0:0 < 1001 && i31:0:0 > -1) ---------------------------------------- (31) RankingReductionPairProof (EQUIVALENT) Interpretation: [ f1374_0_add_Load ] = -1/2*f1374_0_add_Load_1 The following rules are decreasing: f1374_0_add_Load(i31:0:0) -> f1374_0_add_Load(c) :|: c = i31:0:0 + 2 && (i31:0:0 < 1001 && i31:0:0 > -1) The following rules are bounded: f1374_0_add_Load(i31:0:0) -> f1374_0_add_Load(c) :|: c = i31:0:0 + 2 && (i31:0:0 < 1001 && i31:0:0 > -1) ---------------------------------------- (32) YES ---------------------------------------- (33) Obligation: SCC of termination graph based on JBC Program. SCC contains nodes from the following methods: example_1.Test.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: ---------------------------------------- (34) SCCToIRSProof (SOUND) Transformed FIGraph SCCs to intTRSs. Log: Generated rules. Obtained 20 IRulesP rules: f316_0_add_Load(EOS(STATIC_316), matching1, matching2, i11, i11) -> f317_0_add_GT(EOS(STATIC_317), 1000, 1000, i11, i11, 1000) :|: TRUE && matching1 = 1000 && matching2 = 1000 f317_0_add_GT(EOS(STATIC_317), matching1, matching2, i14, i14, matching3) -> f345_0_add_GT(EOS(STATIC_345), 1000, 1000, i14, i14, 1000) :|: TRUE && matching1 = 1000 && matching2 = 1000 && matching3 = 1000 f345_0_add_GT(EOS(STATIC_345), matching1, matching2, i14, i14, matching3) -> f358_0_add_Load(EOS(STATIC_358), 1000, 1000, i14) :|: i14 <= 1000 && matching1 = 1000 && matching2 = 1000 && matching3 = 1000 f358_0_add_Load(EOS(STATIC_358), matching1, matching2, i14) -> f363_0_add_Load(EOS(STATIC_363), 1000, 1000, i14) :|: TRUE && matching1 = 1000 && matching2 = 1000 f363_0_add_Load(EOS(STATIC_363), matching1, matching2, i14) -> f368_0_add_IntArithmetic(EOS(STATIC_368), 1000, 1000, i14, i14) :|: TRUE && matching1 = 1000 && matching2 = 1000 f368_0_add_IntArithmetic(EOS(STATIC_368), matching1, matching2, i14, i14) -> f372_0_add_Store(EOS(STATIC_372), 1000, 1000, i14) :|: i14 >= 0 && matching1 = 1000 && matching2 = 1000 f372_0_add_Store(EOS(STATIC_372), matching1, matching2, i14) -> f386_0_add_Load(EOS(STATIC_386), 1000, 1000, i14) :|: TRUE && matching1 = 1000 && matching2 = 1000 f386_0_add_Load(EOS(STATIC_386), matching1, matching2, i14) -> f392_0_add_Load(EOS(STATIC_392), 1000, 1000, i14) :|: TRUE && matching1 = 1000 && matching2 = 1000 f392_0_add_Load(EOS(STATIC_392), matching1, matching2, i14) -> f396_0_add_InvokeMethod(EOS(STATIC_396), 1000, 1000, i14) :|: TRUE && matching1 = 1000 && matching2 = 1000 f396_0_add_InvokeMethod(EOS(STATIC_396), matching1, matching2, i14) -> f398_0_incr_Load(EOS(STATIC_398), 1000, 1000, i14) :|: TRUE && matching1 = 1000 && matching2 = 1000 f398_0_incr_Load(EOS(STATIC_398), matching1, matching2, i14) -> f402_0_incr_ConstantStackPush(EOS(STATIC_402), 1000, 1000, i14) :|: TRUE && matching1 = 1000 && matching2 = 1000 f402_0_incr_ConstantStackPush(EOS(STATIC_402), matching1, matching2, i14) -> f407_0_incr_IntArithmetic(EOS(STATIC_407), 1000, 1000, i14, 1) :|: TRUE && matching1 = 1000 && matching2 = 1000 f407_0_incr_IntArithmetic(EOS(STATIC_407), matching1, matching2, i14, matching3) -> f412_0_incr_Duplicate(EOS(STATIC_412), 1000, 1000, i14 + 1) :|: i14 >= 0 && matching1 = 1000 && matching2 = 1000 && matching3 = 1 f412_0_incr_Duplicate(EOS(STATIC_412), matching1, matching2, i17) -> f418_0_incr_Store(EOS(STATIC_418), 1000, 1000, i17, i17) :|: TRUE && matching1 = 1000 && matching2 = 1000 f418_0_incr_Store(EOS(STATIC_418), matching1, matching2, i17, i17) -> f423_0_incr_Return(EOS(STATIC_423), 1000, 1000, i17) :|: TRUE && matching1 = 1000 && matching2 = 1000 f423_0_incr_Return(EOS(STATIC_423), matching1, matching2, i17) -> f427_0_add_Store(EOS(STATIC_427), 1000, 1000, i17) :|: TRUE && matching1 = 1000 && matching2 = 1000 f427_0_add_Store(EOS(STATIC_427), matching1, matching2, i17) -> f429_0_add_JMP(EOS(STATIC_429), 1000, 1000, i17) :|: TRUE && matching1 = 1000 && matching2 = 1000 f429_0_add_JMP(EOS(STATIC_429), matching1, matching2, i17) -> f470_0_add_Load(EOS(STATIC_470), 1000, 1000, i17) :|: TRUE && matching1 = 1000 && matching2 = 1000 f470_0_add_Load(EOS(STATIC_470), matching1, matching2, i17) -> f315_0_add_Load(EOS(STATIC_315), 1000, 1000, i17) :|: TRUE && matching1 = 1000 && matching2 = 1000 f315_0_add_Load(EOS(STATIC_315), matching1, matching2, i11) -> f316_0_add_Load(EOS(STATIC_316), 1000, 1000, i11, i11) :|: TRUE && matching1 = 1000 && matching2 = 1000 Combined rules. Obtained 1 IRulesP rules: f316_0_add_Load(EOS(STATIC_316), 1000, 1000, i11:0, i11:0) -> f316_0_add_Load(EOS(STATIC_316), 1000, 1000, i11:0 + 1, i11:0 + 1) :|: i11:0 < 1001 && i11:0 > -1 Filtered constant ground arguments: f316_0_add_Load(x1, x2, x3, x4, x5) -> f316_0_add_Load(x4, x5) EOS(x1) -> EOS Filtered duplicate arguments: f316_0_add_Load(x1, x2) -> f316_0_add_Load(x2) Finished conversion. Obtained 1 rules.P rules: f316_0_add_Load(i11:0) -> f316_0_add_Load(i11:0 + 1) :|: i11:0 < 1001 && i11:0 > -1 ---------------------------------------- (35) Obligation: Rules: f316_0_add_Load(i11:0) -> f316_0_add_Load(i11:0 + 1) :|: i11:0 < 1001 && i11:0 > -1 ---------------------------------------- (36) IRSFormatTransformerProof (EQUIVALENT) Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). ---------------------------------------- (37) Obligation: Rules: f316_0_add_Load(i11:0) -> f316_0_add_Load(arith) :|: i11:0 < 1001 && i11:0 > -1 && arith = i11:0 + 1 ---------------------------------------- (38) IRSwTTerminationDigraphProof (EQUIVALENT) Constructed termination digraph! Nodes: (1) f316_0_add_Load(i11:0) -> f316_0_add_Load(arith) :|: i11:0 < 1001 && i11:0 > -1 && arith = i11:0 + 1 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (39) Obligation: Termination digraph: Nodes: (1) f316_0_add_Load(i11:0) -> f316_0_add_Load(arith) :|: i11:0 < 1001 && i11:0 > -1 && arith = i11:0 + 1 Arcs: (1) -> (1) This digraph is fully evaluated! ---------------------------------------- (40) IntTRSCompressionProof (EQUIVALENT) Compressed rules. ---------------------------------------- (41) Obligation: Rules: f316_0_add_Load(i11:0:0) -> f316_0_add_Load(i11:0:0 + 1) :|: i11:0:0 < 1001 && i11:0:0 > -1 ---------------------------------------- (42) TempFilterProof (SOUND) Used the following sort dictionary for filtering: f316_0_add_Load(INTEGER) Replaced non-predefined constructor symbols by 0. ---------------------------------------- (43) Obligation: Rules: f316_0_add_Load(i11:0:0) -> f316_0_add_Load(c) :|: c = i11:0:0 + 1 && (i11:0:0 < 1001 && i11:0:0 > -1) ---------------------------------------- (44) RankingReductionPairProof (EQUIVALENT) Interpretation: [ f316_0_add_Load ] = -1*f316_0_add_Load_1 The following rules are decreasing: f316_0_add_Load(i11:0:0) -> f316_0_add_Load(c) :|: c = i11:0:0 + 1 && (i11:0:0 < 1001 && i11:0:0 > -1) The following rules are bounded: f316_0_add_Load(i11:0:0) -> f316_0_add_Load(c) :|: c = i11:0:0 + 1 && (i11:0:0 < 1001 && i11:0:0 > -1) ---------------------------------------- (45) YES