7.94/3.05 YES 7.94/3.06 proof of /export/starexec/sandbox2/benchmark/theBenchmark.jar 7.94/3.06 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 7.94/3.06 7.94/3.06 7.94/3.06 termination of the given Bare JBC problem could be proven: 7.94/3.06 7.94/3.06 (0) Bare JBC problem 7.94/3.06 (1) BareJBCToJBCProof [EQUIVALENT, 94 ms] 7.94/3.06 (2) JBC problem 7.94/3.06 (3) JBCToGraph [EQUIVALENT, 334 ms] 7.94/3.06 (4) JBCTerminationGraph 7.94/3.06 (5) TerminationGraphToSCCProof [SOUND, 0 ms] 7.94/3.06 (6) AND 7.94/3.06 (7) JBCTerminationSCC 7.94/3.06 (8) SCCToIRSProof [SOUND, 104 ms] 7.94/3.06 (9) IRSwT 7.94/3.06 (10) IRSFormatTransformerProof [EQUIVALENT, 0 ms] 7.94/3.06 (11) IRSwT 7.94/3.06 (12) IRSwTTerminationDigraphProof [EQUIVALENT, 0 ms] 7.94/3.06 (13) IRSwT 7.94/3.06 (14) IntTRSCompressionProof [EQUIVALENT, 0 ms] 7.94/3.06 (15) IRSwT 7.94/3.06 (16) TempFilterProof [SOUND, 12 ms] 7.94/3.06 (17) IntTRS 7.94/3.06 (18) RankingReductionPairProof [EQUIVALENT, 6 ms] 7.94/3.06 (19) YES 7.94/3.06 (20) JBCTerminationSCC 7.94/3.06 (21) SCCToIRSProof [SOUND, 63 ms] 7.94/3.06 (22) IRSwT 7.94/3.06 (23) IRSFormatTransformerProof [EQUIVALENT, 0 ms] 7.94/3.06 (24) IRSwT 7.94/3.06 (25) IRSwTTerminationDigraphProof [EQUIVALENT, 18 ms] 7.94/3.06 (26) IRSwT 7.94/3.06 (27) IntTRSCompressionProof [EQUIVALENT, 0 ms] 7.94/3.06 (28) IRSwT 7.94/3.06 (29) TempFilterProof [SOUND, 37 ms] 7.94/3.06 (30) IntTRS 7.94/3.06 (31) RankingReductionPairProof [EQUIVALENT, 19 ms] 7.94/3.06 (32) YES 7.94/3.06 7.94/3.06 7.94/3.06 ---------------------------------------- 7.94/3.06 7.94/3.06 (0) 7.94/3.06 Obligation: 7.94/3.06 need to prove termination of the following program: 7.94/3.06 public class List2 { 7.94/3.06 private List2 next; 7.94/3.06 private int mark; 7.94/3.06 7.94/3.06 static void visit(List2 c) { 7.94/3.06 int expectedMark = c.mark; 7.94/3.06 while (c != null && c.mark == expectedMark) { 7.94/3.06 c.mark = expectedMark + 1; 7.94/3.06 c = c.next; 7.94/3.06 } 7.94/3.06 } 7.94/3.06 7.94/3.06 public static void main(String[] args) { 7.94/3.06 //Create cyclic list: 7.94/3.06 int length = args.length; 7.94/3.06 List2 cur = new List2(); 7.94/3.06 List2 last = cur; 7.94/3.06 while (length-- > 0) { 7.94/3.06 List2 n = new List2(); 7.94/3.06 n.next = cur; 7.94/3.06 cur = n; 7.94/3.06 } 7.94/3.06 last.next = cur; 7.94/3.06 7.94/3.06 visit(cur); 7.94/3.06 } 7.94/3.06 } 7.94/3.06 7.94/3.06 7.94/3.06 7.94/3.06 7.94/3.06 ---------------------------------------- 7.94/3.06 7.94/3.06 (1) BareJBCToJBCProof (EQUIVALENT) 7.94/3.06 initialized classpath 7.94/3.06 ---------------------------------------- 8.22/3.06 8.22/3.06 (2) 8.22/3.06 Obligation: 8.22/3.06 need to prove termination of the following program: 8.22/3.06 public class List2 { 8.22/3.06 private List2 next; 8.22/3.06 private int mark; 8.22/3.06 8.22/3.06 static void visit(List2 c) { 8.22/3.06 int expectedMark = c.mark; 8.22/3.06 while (c != null && c.mark == expectedMark) { 8.22/3.06 c.mark = expectedMark + 1; 8.22/3.06 c = c.next; 8.22/3.06 } 8.22/3.06 } 8.22/3.06 8.22/3.06 public static void main(String[] args) { 8.22/3.06 //Create cyclic list: 8.22/3.06 int length = args.length; 8.22/3.06 List2 cur = new List2(); 8.22/3.06 List2 last = cur; 8.22/3.06 while (length-- > 0) { 8.22/3.06 List2 n = new List2(); 8.22/3.06 n.next = cur; 8.22/3.06 cur = n; 8.22/3.06 } 8.22/3.06 last.next = cur; 8.22/3.06 8.22/3.06 visit(cur); 8.22/3.06 } 8.22/3.06 } 8.22/3.06 8.22/3.06 8.22/3.06 8.22/3.06 8.22/3.06 ---------------------------------------- 8.22/3.06 8.22/3.06 (3) JBCToGraph (EQUIVALENT) 8.22/3.06 Constructed TerminationGraph. 8.22/3.06 ---------------------------------------- 8.22/3.06 8.22/3.06 (4) 8.22/3.06 Obligation: 8.22/3.06 Termination Graph based on JBC Program: 8.22/3.06 List2.main([Ljava/lang/String;)V: Graph of 56 nodes with 1 SCC. 8.22/3.06 8.22/3.06 8.22/3.06 8.22/3.06 List2.visit(LList2;)V: Graph of 29 nodes with 1 SCC. 8.22/3.06 8.22/3.06 8.22/3.06 8.22/3.06 8.22/3.06 8.22/3.06 ---------------------------------------- 8.22/3.06 8.22/3.06 (5) TerminationGraphToSCCProof (SOUND) 8.22/3.06 Splitted TerminationGraph to 2 SCCss. 8.22/3.06 ---------------------------------------- 8.22/3.06 8.22/3.06 (6) 8.22/3.06 Complex Obligation (AND) 8.22/3.06 8.22/3.06 ---------------------------------------- 8.22/3.06 8.22/3.06 (7) 8.22/3.06 Obligation: 8.22/3.06 SCC of termination graph based on JBC Program. 8.22/3.06 SCC contains nodes from the following methods: List2.visit(LList2;)V 8.22/3.06 SCC calls the following helper methods: 8.22/3.06 Performed SCC analyses: 8.22/3.06 *Used field analysis yielded the following read fields: 8.22/3.06 *List2: [mark, next] 8.22/3.06 *Marker field analysis yielded the following relations that could be markers: 8.22/3.06 *List2.mark = iconst_0 (Introduced counter i107) 8.22/3.06 ---------------------------------------- 8.22/3.06 8.22/3.06 (8) SCCToIRSProof (SOUND) 8.22/3.06 Transformed FIGraph SCCs to intTRSs. Log: 8.22/3.06 Generated rules. Obtained 19 IRulesP rules: 8.22/3.06 f693_0_visit_NULL(EOS(STATIC_693), java.lang.Object(o67sub0), matching1, java.lang.Object(o67sub0), i107) -> f867_0_visit_NULL(EOS(STATIC_867), java.lang.Object(o67sub0), 0, java.lang.Object(o67sub0), i107) :|: TRUE && matching1 = 0 8.22/3.06 f867_0_visit_NULL(EOS(STATIC_867), java.lang.Object(o67sub0), matching1, java.lang.Object(o67sub0), i107) -> f872_0_visit_Load(EOS(STATIC_872), java.lang.Object(o67sub0), 0, i107) :|: TRUE && matching1 = 0 8.22/3.06 f872_0_visit_Load(EOS(STATIC_872), java.lang.Object(o67sub0), matching1, i107) -> f918_0_visit_FieldAccess(EOS(STATIC_918), java.lang.Object(o67sub0), 0, java.lang.Object(o67sub0), i107) :|: TRUE && matching1 = 0 8.22/3.06 f918_0_visit_FieldAccess(EOS(STATIC_918), java.lang.Object(List2(EOC, i75, o751620716951)), matching1, java.lang.Object(List2(EOC, i75, o751620716951)), i107) -> f924_0_visit_FieldAccess(EOS(STATIC_924), java.lang.Object(List2(EOC, i75, o751620716951)), 0, java.lang.Object(List2(EOC, i75, o751620716951)), i107) :|: TRUE && matching1 = 0 8.22/3.06 f924_0_visit_FieldAccess(EOS(STATIC_924), java.lang.Object(List2(EOC, i75, o751620716951)), matching1, java.lang.Object(List2(EOC, i75, o751620716951)), i107) -> f928_0_visit_Load(EOS(STATIC_928), java.lang.Object(List2(EOC, i75, o751620716951)), 0, i75, i107) :|: TRUE && matching1 = 0 8.22/3.06 f928_0_visit_Load(EOS(STATIC_928), java.lang.Object(List2(EOC, i75, o751620716951)), matching1, i75, i107) -> f933_0_visit_NE(EOS(STATIC_933), java.lang.Object(List2(EOC, i75, o751620716951)), 0, i75, 0, i107) :|: TRUE && matching1 = 0 8.22/3.06 f933_0_visit_NE(EOS(STATIC_933), java.lang.Object(List2(EOC, matching1, o751620716951)), matching2, matching3, matching4, i107) -> f950_0_visit_NE(EOS(STATIC_950), java.lang.Object(List2(EOC, 0, o751620716951)), 0, 0, 0, i107) :|: i75 = 0 && matching1 = 0 && matching2 = 0 && matching3 = 0 && matching4 = 0 8.22/3.06 f950_0_visit_NE(EOS(STATIC_950), java.lang.Object(List2(EOC, matching1, o751620716951)), matching2, matching3, matching4, i107) -> f965_0_visit_Load(EOS(STATIC_965), java.lang.Object(List2(EOC, 0, o751620716951)), 0, i107) :|: TRUE && matching1 = 0 && matching2 = 0 && matching3 = 0 && matching4 = 0 8.22/3.06 f965_0_visit_Load(EOS(STATIC_965), java.lang.Object(List2(EOC, matching1, o751620716951)), matching2, i107) -> f970_0_visit_Load(EOS(STATIC_970), java.lang.Object(List2(EOC, 0, o751620716951)), 0, java.lang.Object(List2(EOC, 0, o751620716951)), i107) :|: TRUE && matching1 = 0 && matching2 = 0 8.22/3.06 f970_0_visit_Load(EOS(STATIC_970), java.lang.Object(List2(EOC, matching1, o751620716951)), matching2, java.lang.Object(List2(EOC, matching3, o751620716951)), i107) -> f976_0_visit_ConstantStackPush(EOS(STATIC_976), java.lang.Object(List2(EOC, 0, o751620716951)), 0, java.lang.Object(List2(EOC, 0, o751620716951)), 0, i107) :|: TRUE && matching1 = 0 && matching2 = 0 && matching3 = 0 8.22/3.06 f976_0_visit_ConstantStackPush(EOS(STATIC_976), java.lang.Object(List2(EOC, matching1, o751620716951)), matching2, java.lang.Object(List2(EOC, matching3, o751620716951)), matching4, i107) -> f982_0_visit_IntArithmetic(EOS(STATIC_982), java.lang.Object(List2(EOC, 0, o751620716951)), 0, java.lang.Object(List2(EOC, 0, o751620716951)), 0, 1, i107) :|: TRUE && matching1 = 0 && matching2 = 0 && matching3 = 0 && matching4 = 0 8.22/3.06 f982_0_visit_IntArithmetic(EOS(STATIC_982), java.lang.Object(List2(EOC, matching1, o751620716951)), matching2, java.lang.Object(List2(EOC, matching3, o751620716951)), matching4, matching5, i107) -> f1000_0_visit_FieldAccess(EOS(STATIC_1000), java.lang.Object(List2(EOC, 0, o751620716951)), 0, java.lang.Object(List2(EOC, 0, o751620716951)), 1, i107) :|: TRUE && matching1 = 0 && matching2 = 0 && matching3 = 0 && matching4 = 0 && matching5 = 1 8.22/3.06 f1000_0_visit_FieldAccess(EOS(STATIC_1000), java.lang.Object(List2(EOC, matching1, o751620716951)), matching2, java.lang.Object(List2(EOC, matching3, o751620716951)), matching4, i107) -> f1016_0_visit_Load(EOS(STATIC_1016), java.lang.Object(List2(EOC, 1, o75put1620716951)), 0, i107 + -1) :|: i107 >= 0 && matching1 = 0 && matching2 = 0 && matching3 = 0 && matching4 = 1 8.22/3.06 f1016_0_visit_Load(EOS(STATIC_1016), java.lang.Object(List2(EOC, matching1, o751620716951)), matching2, i107) -> f1020_0_visit_FieldAccess(EOS(STATIC_1020), 0, java.lang.Object(List2(EOC, 1, o751620716951)), i107) :|: TRUE && matching1 = 1 && matching2 = 0 8.22/3.06 f1020_0_visit_FieldAccess(EOS(STATIC_1020), matching1, java.lang.Object(List2(EOC, matching2, o751620716951)), i107) -> f1024_0_visit_Store(EOS(STATIC_1024), 0, o750, i107) :|: TRUE && matching1 = 0 && matching2 = 1 8.22/3.06 f1024_0_visit_Store(EOS(STATIC_1024), matching1, o750, i107) -> f1026_0_visit_JMP(EOS(STATIC_1026), o750, 0, i107) :|: TRUE && matching1 = 0 8.22/3.06 f1026_0_visit_JMP(EOS(STATIC_1026), o750, matching1, i107) -> f1028_0_visit_Load(EOS(STATIC_1028), o750, 0, i107) :|: TRUE && matching1 = 0 8.22/3.06 f1028_0_visit_Load(EOS(STATIC_1028), o750, matching1, i107) -> f679_0_visit_Load(EOS(STATIC_679), o750, 0, i107) :|: TRUE && matching1 = 0 8.22/3.06 f679_0_visit_Load(EOS(STATIC_679), o580, matching1, i107) -> f693_0_visit_NULL(EOS(STATIC_693), o580, 0, o580, i107) :|: TRUE && matching1 = 0 8.22/3.06 Combined rules. Obtained 1 IRulesP rules: 8.22/3.06 f693_0_visit_NULL(EOS(STATIC_693), java.lang.Object(List2(EOC, 0, o751620716951:0)), 0, java.lang.Object(List2(EOC, 0, o751620716951:0)), i107:0) -> f693_0_visit_NULL(EOS(STATIC_693), o750:0, 0, o750:0, i107:0 - 1) :|: i107:0 > -1 8.22/3.06 Filtered constant ground arguments: 8.22/3.06 f693_0_visit_NULL(x1, x2, x3, x4, x5) -> f693_0_visit_NULL(x2, x4, x5) 8.22/3.06 EOS(x1) -> EOS 8.22/3.06 List2(x1, x2, x3) -> List2(x3) 8.22/3.06 Filtered duplicate arguments: 8.22/3.06 f693_0_visit_NULL(x1, x2, x3) -> f693_0_visit_NULL(x2, x3) 8.22/3.06 Finished conversion. Obtained 1 rules.P rules: 8.22/3.06 f693_0_visit_NULL(java.lang.Object(List2(o751620716951:0)), i107:0) -> f693_0_visit_NULL(o750:0, i107:0 - 1) :|: i107:0 > -1 8.22/3.06 8.22/3.06 ---------------------------------------- 8.22/3.06 8.22/3.06 (9) 8.22/3.06 Obligation: 8.22/3.06 Rules: 8.22/3.06 f693_0_visit_NULL(java.lang.Object(List2(o751620716951:0)), i107:0) -> f693_0_visit_NULL(o750:0, i107:0 - 1) :|: i107:0 > -1 8.22/3.06 8.22/3.06 ---------------------------------------- 8.22/3.06 8.22/3.06 (10) IRSFormatTransformerProof (EQUIVALENT) 8.22/3.06 Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). 8.22/3.06 ---------------------------------------- 8.22/3.06 8.22/3.06 (11) 8.22/3.06 Obligation: 8.22/3.06 Rules: 8.22/3.06 f693_0_visit_NULL(java.lang.Object(List2(o751620716951:0)), i107:0) -> f693_0_visit_NULL(o750:0, arith) :|: i107:0 > -1 && arith = i107:0 - 1 8.22/3.06 8.22/3.06 ---------------------------------------- 8.22/3.06 8.22/3.06 (12) IRSwTTerminationDigraphProof (EQUIVALENT) 8.22/3.06 Constructed termination digraph! 8.22/3.06 Nodes: 8.22/3.06 (1) f693_0_visit_NULL(java.lang.Object(List2(o751620716951:0)), i107:0) -> f693_0_visit_NULL(o750:0, arith) :|: i107:0 > -1 && arith = i107:0 - 1 8.22/3.06 8.22/3.06 Arcs: 8.22/3.06 (1) -> (1) 8.22/3.06 8.22/3.06 This digraph is fully evaluated! 8.22/3.06 ---------------------------------------- 8.22/3.06 8.22/3.06 (13) 8.22/3.06 Obligation: 8.22/3.06 8.22/3.06 Termination digraph: 8.22/3.06 Nodes: 8.22/3.06 (1) f693_0_visit_NULL(java.lang.Object(List2(o751620716951:0)), i107:0) -> f693_0_visit_NULL(o750:0, arith) :|: i107:0 > -1 && arith = i107:0 - 1 8.22/3.06 8.22/3.06 Arcs: 8.22/3.06 (1) -> (1) 8.22/3.06 8.22/3.06 This digraph is fully evaluated! 8.22/3.06 8.22/3.06 ---------------------------------------- 8.22/3.06 8.22/3.06 (14) IntTRSCompressionProof (EQUIVALENT) 8.22/3.06 Compressed rules. 8.22/3.06 ---------------------------------------- 8.22/3.06 8.22/3.06 (15) 8.22/3.06 Obligation: 8.22/3.06 Rules: 8.22/3.06 f693_0_visit_NULL(java.lang.Object(List2(o751620716951:0:0)), i107:0:0) -> f693_0_visit_NULL(o750:0:0, i107:0:0 - 1) :|: i107:0:0 > -1 8.22/3.06 8.22/3.06 ---------------------------------------- 8.22/3.06 8.22/3.06 (16) TempFilterProof (SOUND) 8.22/3.06 Used the following sort dictionary for filtering: 8.22/3.06 f693_0_visit_NULL(VARIABLE, INTEGER) 8.22/3.06 java.lang.Object(VARIABLE) 8.22/3.06 List2(VARIABLE) 8.22/3.06 Replaced non-predefined constructor symbols by 0. 8.22/3.06 ---------------------------------------- 8.22/3.06 8.22/3.06 (17) 8.22/3.06 Obligation: 8.22/3.06 Rules: 8.22/3.06 f693_0_visit_NULL(c, i107:0:0) -> f693_0_visit_NULL(o750:0:0, c1) :|: c1 = i107:0:0 - 1 && c = 0 && i107:0:0 > -1 8.22/3.06 8.22/3.06 ---------------------------------------- 8.22/3.06 8.22/3.06 (18) RankingReductionPairProof (EQUIVALENT) 8.22/3.06 Interpretation: 8.22/3.06 [ f693_0_visit_NULL ] = f693_0_visit_NULL_2 8.22/3.06 8.22/3.06 The following rules are decreasing: 8.22/3.06 f693_0_visit_NULL(c, i107:0:0) -> f693_0_visit_NULL(o750:0:0, c1) :|: c1 = i107:0:0 - 1 && c = 0 && i107:0:0 > -1 8.22/3.06 8.22/3.06 The following rules are bounded: 8.22/3.06 f693_0_visit_NULL(c, i107:0:0) -> f693_0_visit_NULL(o750:0:0, c1) :|: c1 = i107:0:0 - 1 && c = 0 && i107:0:0 > -1 8.22/3.06 8.22/3.06 8.22/3.06 ---------------------------------------- 8.22/3.06 8.22/3.06 (19) 8.22/3.06 YES 8.22/3.06 8.22/3.06 ---------------------------------------- 8.22/3.06 8.22/3.06 (20) 8.22/3.06 Obligation: 8.22/3.06 SCC of termination graph based on JBC Program. 8.22/3.06 SCC contains nodes from the following methods: List2.main([Ljava/lang/String;)V 8.22/3.06 SCC calls the following helper methods: 8.22/3.06 Performed SCC analyses: 8.22/3.06 *Used field analysis yielded the following read fields: 8.22/3.06 8.22/3.06 *Marker field analysis yielded the following relations that could be markers: 8.22/3.06 8.22/3.06 ---------------------------------------- 8.22/3.06 8.22/3.06 (21) SCCToIRSProof (SOUND) 8.22/3.06 Transformed FIGraph SCCs to intTRSs. Log: 8.22/3.06 Generated rules. Obtained 18 IRulesP rules: 8.22/3.06 f922_0_main_Inc(EOS(STATIC_922), i70, i70) -> f927_0_main_LE(EOS(STATIC_927), i70 + -1, i70) :|: TRUE 8.22/3.06 f927_0_main_LE(EOS(STATIC_927), i76, i79) -> f932_0_main_LE(EOS(STATIC_932), i76, i79) :|: TRUE 8.22/3.06 f932_0_main_LE(EOS(STATIC_932), i76, i79) -> f937_0_main_New(EOS(STATIC_937), i76) :|: i79 > 0 8.22/3.06 f937_0_main_New(EOS(STATIC_937), i76) -> f956_0_main_Duplicate(EOS(STATIC_956), i76) :|: TRUE 8.22/3.06 f956_0_main_Duplicate(EOS(STATIC_956), i76) -> f967_0_main_InvokeMethod(EOS(STATIC_967), i76) :|: TRUE 8.22/3.06 f967_0_main_InvokeMethod(EOS(STATIC_967), i76) -> f975_0__init__Load(EOS(STATIC_975), i76) :|: TRUE 8.22/3.06 f975_0__init__Load(EOS(STATIC_975), i76) -> f999_0__init__InvokeMethod(EOS(STATIC_999), i76) :|: TRUE 8.22/3.06 f999_0__init__InvokeMethod(EOS(STATIC_999), i76) -> f1015_0__init__Return(EOS(STATIC_1015), i76) :|: TRUE 8.22/3.06 f1015_0__init__Return(EOS(STATIC_1015), i76) -> f1019_0_main_Store(EOS(STATIC_1019), i76) :|: TRUE 8.22/3.06 f1019_0_main_Store(EOS(STATIC_1019), i76) -> f1023_0_main_Load(EOS(STATIC_1023), i76) :|: TRUE 8.22/3.06 f1023_0_main_Load(EOS(STATIC_1023), i76) -> f1025_0_main_Load(EOS(STATIC_1025), i76) :|: TRUE 8.22/3.06 f1025_0_main_Load(EOS(STATIC_1025), i76) -> f1027_0_main_FieldAccess(EOS(STATIC_1027), i76) :|: TRUE 8.22/3.06 f1027_0_main_FieldAccess(EOS(STATIC_1027), i76) -> f1125_0_main_Load(EOS(STATIC_1125), i76) :|: TRUE 8.22/3.06 f1125_0_main_Load(EOS(STATIC_1125), i76) -> f1617_0_main_Store(EOS(STATIC_1617), i76) :|: TRUE 8.22/3.06 f1617_0_main_Store(EOS(STATIC_1617), i76) -> f1621_0_main_JMP(EOS(STATIC_1621), i76) :|: TRUE 8.22/3.06 f1621_0_main_JMP(EOS(STATIC_1621), i76) -> f1648_0_main_Load(EOS(STATIC_1648), i76) :|: TRUE 8.22/3.06 f1648_0_main_Load(EOS(STATIC_1648), i76) -> f912_0_main_Load(EOS(STATIC_912), i76) :|: TRUE 8.22/3.06 f912_0_main_Load(EOS(STATIC_912), i70) -> f922_0_main_Inc(EOS(STATIC_922), i70, i70) :|: TRUE 8.22/3.06 Combined rules. Obtained 1 IRulesP rules: 8.22/3.06 f922_0_main_Inc(EOS(STATIC_922), i70:0, i70:0) -> f922_0_main_Inc(EOS(STATIC_922), i70:0 - 1, i70:0 - 1) :|: i70:0 > 0 8.22/3.06 Filtered constant ground arguments: 8.22/3.06 f922_0_main_Inc(x1, x2, x3) -> f922_0_main_Inc(x2, x3) 8.22/3.06 EOS(x1) -> EOS 8.22/3.06 Filtered duplicate arguments: 8.22/3.06 f922_0_main_Inc(x1, x2) -> f922_0_main_Inc(x2) 8.22/3.06 Finished conversion. Obtained 1 rules.P rules: 8.22/3.06 f922_0_main_Inc(i70:0) -> f922_0_main_Inc(i70:0 - 1) :|: i70:0 > 0 8.22/3.06 8.22/3.06 ---------------------------------------- 8.22/3.06 8.22/3.06 (22) 8.22/3.06 Obligation: 8.22/3.06 Rules: 8.22/3.06 f922_0_main_Inc(i70:0) -> f922_0_main_Inc(i70:0 - 1) :|: i70:0 > 0 8.22/3.06 8.22/3.06 ---------------------------------------- 8.22/3.06 8.22/3.06 (23) IRSFormatTransformerProof (EQUIVALENT) 8.22/3.06 Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). 8.22/3.06 ---------------------------------------- 8.22/3.06 8.22/3.06 (24) 8.22/3.06 Obligation: 8.22/3.06 Rules: 8.22/3.06 f922_0_main_Inc(i70:0) -> f922_0_main_Inc(arith) :|: i70:0 > 0 && arith = i70:0 - 1 8.22/3.06 8.22/3.06 ---------------------------------------- 8.22/3.06 8.22/3.06 (25) IRSwTTerminationDigraphProof (EQUIVALENT) 8.22/3.06 Constructed termination digraph! 8.22/3.06 Nodes: 8.22/3.06 (1) f922_0_main_Inc(i70:0) -> f922_0_main_Inc(arith) :|: i70:0 > 0 && arith = i70:0 - 1 8.22/3.06 8.22/3.06 Arcs: 8.22/3.06 (1) -> (1) 8.22/3.06 8.22/3.06 This digraph is fully evaluated! 8.22/3.06 ---------------------------------------- 8.22/3.06 8.22/3.06 (26) 8.22/3.06 Obligation: 8.22/3.06 8.22/3.06 Termination digraph: 8.22/3.06 Nodes: 8.22/3.06 (1) f922_0_main_Inc(i70:0) -> f922_0_main_Inc(arith) :|: i70:0 > 0 && arith = i70:0 - 1 8.22/3.06 8.22/3.06 Arcs: 8.22/3.06 (1) -> (1) 8.22/3.06 8.22/3.06 This digraph is fully evaluated! 8.22/3.06 8.22/3.06 ---------------------------------------- 8.22/3.06 8.22/3.06 (27) IntTRSCompressionProof (EQUIVALENT) 8.22/3.06 Compressed rules. 8.22/3.06 ---------------------------------------- 8.22/3.06 8.22/3.06 (28) 8.22/3.06 Obligation: 8.22/3.06 Rules: 8.22/3.06 f922_0_main_Inc(i70:0:0) -> f922_0_main_Inc(i70:0:0 - 1) :|: i70:0:0 > 0 8.22/3.06 8.22/3.06 ---------------------------------------- 8.22/3.06 8.22/3.06 (29) TempFilterProof (SOUND) 8.22/3.06 Used the following sort dictionary for filtering: 8.22/3.06 f922_0_main_Inc(INTEGER) 8.22/3.06 Replaced non-predefined constructor symbols by 0. 8.22/3.06 ---------------------------------------- 8.22/3.06 8.22/3.06 (30) 8.22/3.06 Obligation: 8.22/3.06 Rules: 8.22/3.06 f922_0_main_Inc(i70:0:0) -> f922_0_main_Inc(c) :|: c = i70:0:0 - 1 && i70:0:0 > 0 8.22/3.06 8.22/3.06 ---------------------------------------- 8.22/3.06 8.22/3.06 (31) RankingReductionPairProof (EQUIVALENT) 8.22/3.06 Interpretation: 8.22/3.06 [ f922_0_main_Inc ] = f922_0_main_Inc_1 8.22/3.06 8.22/3.06 The following rules are decreasing: 8.22/3.06 f922_0_main_Inc(i70:0:0) -> f922_0_main_Inc(c) :|: c = i70:0:0 - 1 && i70:0:0 > 0 8.22/3.06 8.22/3.06 The following rules are bounded: 8.22/3.06 f922_0_main_Inc(i70:0:0) -> f922_0_main_Inc(c) :|: c = i70:0:0 - 1 && i70:0:0 > 0 8.22/3.06 8.22/3.06 8.22/3.06 ---------------------------------------- 8.22/3.06 8.22/3.06 (32) 8.22/3.06 YES 9.02/5.52 EOF