6.34/2.55 YES 6.34/2.57 proof of /export/starexec/sandbox2/benchmark/theBenchmark.jar 6.34/2.57 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 6.34/2.57 6.34/2.57 6.34/2.57 termination of the given Bare JBC problem could be proven: 6.34/2.57 6.34/2.57 (0) Bare JBC problem 6.34/2.57 (1) BareJBCToJBCProof [EQUIVALENT, 96 ms] 6.34/2.57 (2) JBC problem 6.34/2.57 (3) JBCToGraph [EQUIVALENT, 315 ms] 6.34/2.57 (4) JBCTerminationGraph 6.34/2.57 (5) TerminationGraphToSCCProof [SOUND, 0 ms] 6.34/2.57 (6) JBCTerminationSCC 6.34/2.57 (7) SCCToIRSProof [SOUND, 147 ms] 6.34/2.57 (8) IRSwT 6.34/2.57 (9) IRSFormatTransformerProof [EQUIVALENT, 0 ms] 6.34/2.57 (10) IRSwT 6.34/2.57 (11) IRSwTTerminationDigraphProof [EQUIVALENT, 4 ms] 6.34/2.57 (12) IRSwT 6.34/2.57 (13) IntTRSCompressionProof [EQUIVALENT, 0 ms] 6.34/2.57 (14) IRSwT 6.34/2.57 (15) TempFilterProof [SOUND, 44 ms] 6.34/2.57 (16) IntTRS 6.34/2.57 (17) PolynomialOrderProcessor [EQUIVALENT, 13 ms] 6.34/2.57 (18) YES 6.34/2.57 6.34/2.57 6.34/2.57 ---------------------------------------- 6.34/2.57 6.34/2.57 (0) 6.34/2.57 Obligation: 6.34/2.57 need to prove termination of the following program: 6.34/2.57 /** 6.34/2.57 * Java can do infinite data objects, too. 6.34/2.57 * Here we take the first n elements from an 6.34/2.57 * ascending infinite list of integer numbers. 6.34/2.57 * 6.34/2.57 * @author Carsten Fuhs 6.34/2.57 */ 6.34/2.57 public class Take { 6.34/2.57 6.34/2.57 public static int[] take(int n, MyIterator f) { 6.34/2.57 int[] result = new int[n]; 6.34/2.57 for (int i = 0; i < n; ++i) { 6.34/2.57 if (f.hasNext()) { 6.34/2.57 result[i] = f.next(); 6.34/2.57 } 6.34/2.57 else { 6.34/2.57 break; 6.34/2.57 } 6.34/2.57 } 6.34/2.57 return result; 6.34/2.57 } 6.34/2.57 6.34/2.57 public static void main(String args[]) { 6.34/2.57 int start = args[0].length(); 6.34/2.57 int howMany = args[1].length(); 6.34/2.57 From f = new From(start); 6.34/2.57 int[] firstHowMany = take(howMany, f); 6.34/2.57 } 6.34/2.57 } 6.34/2.57 6.34/2.57 interface MyIterator { 6.34/2.57 boolean hasNext(); 6.34/2.57 int next(); 6.34/2.57 } 6.34/2.57 6.34/2.57 class From implements MyIterator { 6.34/2.57 6.34/2.57 private int current; 6.34/2.57 6.34/2.57 public From(int start) { 6.34/2.57 this.current = start; 6.34/2.57 } 6.34/2.57 6.34/2.57 public boolean hasNext() { 6.34/2.57 return true; 6.34/2.57 } 6.34/2.57 6.34/2.57 public int next() { 6.34/2.57 return current++; 6.34/2.57 } 6.34/2.57 } 6.34/2.57 6.34/2.57 6.34/2.57 6.34/2.57 6.34/2.57 ---------------------------------------- 6.34/2.57 6.34/2.57 (1) BareJBCToJBCProof (EQUIVALENT) 6.34/2.57 initialized classpath 6.34/2.57 ---------------------------------------- 6.34/2.57 6.34/2.57 (2) 6.34/2.57 Obligation: 6.34/2.57 need to prove termination of the following program: 6.34/2.57 /** 6.34/2.57 * Java can do infinite data objects, too. 6.34/2.57 * Here we take the first n elements from an 6.34/2.57 * ascending infinite list of integer numbers. 6.34/2.57 * 6.34/2.57 * @author Carsten Fuhs 6.34/2.57 */ 6.34/2.57 public class Take { 6.34/2.57 6.34/2.57 public static int[] take(int n, MyIterator f) { 6.34/2.57 int[] result = new int[n]; 6.34/2.57 for (int i = 0; i < n; ++i) { 6.34/2.57 if (f.hasNext()) { 6.34/2.57 result[i] = f.next(); 6.34/2.57 } 6.34/2.57 else { 6.34/2.57 break; 6.34/2.57 } 6.34/2.57 } 6.34/2.57 return result; 6.34/2.57 } 6.34/2.57 6.34/2.57 public static void main(String args[]) { 6.34/2.57 int start = args[0].length(); 6.34/2.57 int howMany = args[1].length(); 6.34/2.57 From f = new From(start); 6.34/2.57 int[] firstHowMany = take(howMany, f); 6.34/2.57 } 6.34/2.57 } 6.34/2.57 6.34/2.57 interface MyIterator { 6.34/2.57 boolean hasNext(); 6.34/2.57 int next(); 6.34/2.57 } 6.34/2.57 6.34/2.57 class From implements MyIterator { 6.34/2.57 6.34/2.57 private int current; 6.34/2.57 6.34/2.57 public From(int start) { 6.34/2.57 this.current = start; 6.34/2.57 } 6.34/2.57 6.34/2.57 public boolean hasNext() { 6.34/2.57 return true; 6.34/2.57 } 6.34/2.57 6.34/2.57 public int next() { 6.34/2.57 return current++; 6.34/2.57 } 6.34/2.57 } 6.34/2.57 6.34/2.57 6.34/2.57 6.34/2.57 6.34/2.57 ---------------------------------------- 6.34/2.57 6.34/2.57 (3) JBCToGraph (EQUIVALENT) 6.34/2.57 Constructed TerminationGraph. 6.34/2.57 ---------------------------------------- 6.34/2.57 6.34/2.57 (4) 6.34/2.57 Obligation: 6.34/2.57 Termination Graph based on JBC Program: 6.34/2.57 Take.main([Ljava/lang/String;)V: Graph of 194 nodes with 1 SCC. 6.34/2.57 6.34/2.57 6.34/2.57 6.34/2.57 6.34/2.57 6.34/2.57 ---------------------------------------- 6.34/2.57 6.34/2.57 (5) TerminationGraphToSCCProof (SOUND) 6.34/2.57 Splitted TerminationGraph to 1 SCCs. 6.34/2.57 ---------------------------------------- 6.34/2.57 6.34/2.57 (6) 6.34/2.57 Obligation: 6.34/2.57 SCC of termination graph based on JBC Program. 6.34/2.57 SCC contains nodes from the following methods: Take.main([Ljava/lang/String;)V 6.34/2.57 SCC calls the following helper methods: 6.34/2.57 Performed SCC analyses: 6.34/2.57 *Used field analysis yielded the following read fields: 6.34/2.57 *From: [current] 6.34/2.57 *Marker field analysis yielded the following relations that could be markers: 6.34/2.57 6.34/2.57 ---------------------------------------- 6.34/2.57 6.34/2.57 (7) SCCToIRSProof (SOUND) 6.34/2.57 Transformed FIGraph SCCs to intTRSs. Log: 6.34/2.57 Generated rules. Obtained 26 IRulesP rules: 6.34/2.57 f748_0_take_Load(EOS(STATIC_748), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86, i86) -> f750_0_take_GE(EOS(STATIC_750), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86, i86, i84) :|: TRUE 6.34/2.57 f750_0_take_GE(EOS(STATIC_750), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86, i86, i84) -> f767_0_take_GE(EOS(STATIC_767), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86, i86, i84) :|: i86 < i84 6.34/2.57 f767_0_take_GE(EOS(STATIC_767), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86, i86, i84) -> f776_0_take_Load(EOS(STATIC_776), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86) :|: i86 < i84 6.34/2.57 f776_0_take_Load(EOS(STATIC_776), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86) -> f780_0_take_InvokeMethod(EOS(STATIC_780), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86, java.lang.Object(From(EOC, i85))) :|: TRUE 6.34/2.57 f780_0_take_InvokeMethod(EOS(STATIC_780), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86, java.lang.Object(From(EOC, i85))) -> f785_0_hasNext_ConstantStackPush(EOS(STATIC_785), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86) :|: TRUE 6.34/2.57 f785_0_hasNext_ConstantStackPush(EOS(STATIC_785), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86) -> f792_0_hasNext_Return(EOS(STATIC_792), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86, 1) :|: TRUE 6.34/2.57 f792_0_hasNext_Return(EOS(STATIC_792), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86, matching1) -> f794_0_take_EQ(EOS(STATIC_794), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86, 1) :|: TRUE && matching1 = 1 6.34/2.57 f794_0_take_EQ(EOS(STATIC_794), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86, matching1) -> f797_0_take_Load(EOS(STATIC_797), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86) :|: 1 > 0 && matching1 = 1 6.34/2.57 f797_0_take_Load(EOS(STATIC_797), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86) -> f799_0_take_Load(EOS(STATIC_799), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86, java.lang.Object(ARRAY(i84))) :|: TRUE 6.34/2.57 f799_0_take_Load(EOS(STATIC_799), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86, java.lang.Object(ARRAY(i84))) -> f801_0_take_Load(EOS(STATIC_801), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86, java.lang.Object(ARRAY(i84)), i86) :|: TRUE 6.34/2.57 f801_0_take_Load(EOS(STATIC_801), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86, java.lang.Object(ARRAY(i84)), i86) -> f802_0_take_InvokeMethod(EOS(STATIC_802), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86, java.lang.Object(ARRAY(i84)), i86, java.lang.Object(From(EOC, i85))) :|: TRUE 6.34/2.57 f802_0_take_InvokeMethod(EOS(STATIC_802), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86, java.lang.Object(ARRAY(i84)), i86, java.lang.Object(From(EOC, i85))) -> f805_0_next_Load(EOS(STATIC_805), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86, java.lang.Object(ARRAY(i84)), i86, java.lang.Object(From(EOC, i85))) :|: TRUE 6.34/2.57 f805_0_next_Load(EOS(STATIC_805), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86, java.lang.Object(ARRAY(i84)), i86, java.lang.Object(From(EOC, i85))) -> f806_0_next_Duplicate(EOS(STATIC_806), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86, java.lang.Object(ARRAY(i84)), i86, java.lang.Object(From(EOC, i85))) :|: TRUE 6.34/2.57 f806_0_next_Duplicate(EOS(STATIC_806), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86, java.lang.Object(ARRAY(i84)), i86, java.lang.Object(From(EOC, i85))) -> f809_0_next_FieldAccess(EOS(STATIC_809), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86, java.lang.Object(ARRAY(i84)), i86, java.lang.Object(From(EOC, i85)), java.lang.Object(From(EOC, i85))) :|: TRUE 6.34/2.57 f809_0_next_FieldAccess(EOS(STATIC_809), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86, java.lang.Object(ARRAY(i84)), i86, java.lang.Object(From(EOC, i85)), java.lang.Object(From(EOC, i85))) -> f811_0_next_Duplicate(EOS(STATIC_811), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86, java.lang.Object(ARRAY(i84)), i86, java.lang.Object(From(EOC, i85)), i85) :|: TRUE 6.34/2.57 f811_0_next_Duplicate(EOS(STATIC_811), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86, java.lang.Object(ARRAY(i84)), i86, java.lang.Object(From(EOC, i85)), i85) -> f813_0_next_ConstantStackPush(EOS(STATIC_813), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86, java.lang.Object(ARRAY(i84)), i86, i85, java.lang.Object(From(EOC, i85)), i85) :|: TRUE 6.34/2.57 f813_0_next_ConstantStackPush(EOS(STATIC_813), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86, java.lang.Object(ARRAY(i84)), i86, i85, java.lang.Object(From(EOC, i85)), i85) -> f815_0_next_IntArithmetic(EOS(STATIC_815), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86, java.lang.Object(ARRAY(i84)), i86, i85, java.lang.Object(From(EOC, i85)), i85, 1) :|: TRUE 6.34/2.57 f815_0_next_IntArithmetic(EOS(STATIC_815), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86, java.lang.Object(ARRAY(i84)), i86, i85, java.lang.Object(From(EOC, i85)), i85, matching1) -> f816_0_next_FieldAccess(EOS(STATIC_816), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86, java.lang.Object(ARRAY(i84)), i86, i85, java.lang.Object(From(EOC, i85)), i85 + 1) :|: i85 >= 0 && matching1 = 1 6.34/2.57 f816_0_next_FieldAccess(EOS(STATIC_816), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86, java.lang.Object(ARRAY(i84)), i86, i85, java.lang.Object(From(EOC, i85)), i97) -> f817_0_next_Return(EOS(STATIC_817), i84, java.lang.Object(From(EOC, i97)), java.lang.Object(ARRAY(i84)), i86, java.lang.Object(ARRAY(i84)), i86, i85) :|: TRUE 6.34/2.57 f817_0_next_Return(EOS(STATIC_817), i84, java.lang.Object(From(EOC, i97)), java.lang.Object(ARRAY(i84)), i86, java.lang.Object(ARRAY(i84)), i86, i85) -> f818_0_take_ArrayAccess(EOS(STATIC_818), i84, java.lang.Object(From(EOC, i97)), java.lang.Object(ARRAY(i84)), i86, java.lang.Object(ARRAY(i84)), i86, i85) :|: TRUE 6.34/2.57 f818_0_take_ArrayAccess(EOS(STATIC_818), i84, java.lang.Object(From(EOC, i97)), java.lang.Object(ARRAY(i84)), i86, java.lang.Object(ARRAY(i84)), i86, i85) -> f819_0_take_ArrayAccess(EOS(STATIC_819), i84, java.lang.Object(From(EOC, i97)), java.lang.Object(ARRAY(i84)), i86, java.lang.Object(ARRAY(i84)), i86, i85) :|: TRUE 6.34/2.57 f819_0_take_ArrayAccess(EOS(STATIC_819), i84, java.lang.Object(From(EOC, i97)), java.lang.Object(ARRAY(i84)), i86, java.lang.Object(ARRAY(i84)), i86, i85) -> f821_0_take_Inc(EOS(STATIC_821), i84, java.lang.Object(From(EOC, i97)), java.lang.Object(ARRAY(i84)), i86) :|: i86 < i84 6.34/2.57 f821_0_take_Inc(EOS(STATIC_821), i84, java.lang.Object(From(EOC, i97)), java.lang.Object(ARRAY(i84)), i86) -> f823_0_take_JMP(EOS(STATIC_823), i84, java.lang.Object(From(EOC, i97)), java.lang.Object(ARRAY(i84)), i86 + 1) :|: TRUE 6.34/2.57 f823_0_take_JMP(EOS(STATIC_823), i84, java.lang.Object(From(EOC, i97)), java.lang.Object(ARRAY(i84)), i98) -> f827_0_take_Load(EOS(STATIC_827), i84, java.lang.Object(From(EOC, i97)), java.lang.Object(ARRAY(i84)), i98) :|: TRUE 6.34/2.57 f827_0_take_Load(EOS(STATIC_827), i84, java.lang.Object(From(EOC, i97)), java.lang.Object(ARRAY(i84)), i98) -> f743_0_take_Load(EOS(STATIC_743), i84, java.lang.Object(From(EOC, i97)), java.lang.Object(ARRAY(i84)), i98) :|: TRUE 6.34/2.57 f743_0_take_Load(EOS(STATIC_743), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86) -> f748_0_take_Load(EOS(STATIC_748), i84, java.lang.Object(From(EOC, i85)), java.lang.Object(ARRAY(i84)), i86, i86) :|: TRUE 6.34/2.57 Combined rules. Obtained 1 IRulesP rules: 6.34/2.57 f748_0_take_Load(EOS(STATIC_748), i84:0, java.lang.Object(From(EOC, i85:0)), java.lang.Object(ARRAY(i84:0)), i86:0, i86:0) -> f748_0_take_Load(EOS(STATIC_748), i84:0, java.lang.Object(From(EOC, i85:0 + 1)), java.lang.Object(ARRAY(i84:0)), i86:0 + 1, i86:0 + 1) :|: i86:0 < i84:0 && i85:0 > -1 6.34/2.57 Filtered constant ground arguments: 6.34/2.57 f748_0_take_Load(x1, x2, x3, x4, x5, x6) -> f748_0_take_Load(x2, x3, x4, x5, x6) 6.34/2.57 EOS(x1) -> EOS 6.34/2.57 From(x1, x2) -> From(x2) 6.34/2.57 Filtered duplicate arguments: 6.34/2.57 f748_0_take_Load(x1, x2, x3, x4, x5) -> f748_0_take_Load(x1, x2, x3, x5) 6.34/2.57 Finished conversion. Obtained 1 rules.P rules: 6.34/2.57 f748_0_take_Load(i84:0, java.lang.Object(From(i85:0)), java.lang.Object(ARRAY(i84:0)), i86:0, i85:0, i84:0) -> f748_0_take_Load(i84:0, java.lang.Object(From(i85:0 + 1)), java.lang.Object(ARRAY(i84:0)), i86:0 + 1, i85:0 + 1, i84:0) :|: i86:0 < i84:0 && i85:0 > -1 6.34/2.57 6.34/2.57 ---------------------------------------- 6.34/2.57 6.34/2.57 (8) 6.34/2.57 Obligation: 6.34/2.57 Rules: 6.34/2.57 f748_0_take_Load(i84:0, java.lang.Object(From(i85:0)), java.lang.Object(ARRAY(i84:0)), i86:0, i85:0, i84:0) -> f748_0_take_Load(i84:0, java.lang.Object(From(i85:0 + 1)), java.lang.Object(ARRAY(i84:0)), i86:0 + 1, i85:0 + 1, i84:0) :|: i86:0 < i84:0 && i85:0 > -1 6.34/2.57 6.34/2.57 ---------------------------------------- 6.34/2.57 6.34/2.57 (9) IRSFormatTransformerProof (EQUIVALENT) 6.34/2.57 Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). 6.34/2.57 ---------------------------------------- 6.34/2.57 6.34/2.57 (10) 6.34/2.57 Obligation: 6.34/2.57 Rules: 6.34/2.57 f748_0_take_Load(i84:0, java.lang.Object(From(i85:0)), java.lang.Object(ARRAY(i84:0)), i86:0, i85:0, i84:0) -> f748_0_take_Load(i84:0, java.lang.Object(From(arith1)), java.lang.Object(ARRAY(i84:0)), arith, arith1, i84:0) :|: i86:0 < i84:0 && i85:0 > -1 && arith = i86:0 + 1 && arith1 = i85:0 + 1 && arith1 = i85:0 + 1 6.34/2.57 6.34/2.57 ---------------------------------------- 6.34/2.57 6.34/2.57 (11) IRSwTTerminationDigraphProof (EQUIVALENT) 6.34/2.57 Constructed termination digraph! 6.34/2.57 Nodes: 6.34/2.57 (1) f748_0_take_Load(i84:0, java.lang.Object(From(i85:0)), java.lang.Object(ARRAY(i84:0)), i86:0, i85:0, i84:0) -> f748_0_take_Load(i84:0, java.lang.Object(From(arith1)), java.lang.Object(ARRAY(i84:0)), arith, arith1, i84:0) :|: i86:0 < i84:0 && i85:0 > -1 && arith = i86:0 + 1 && arith1 = i85:0 + 1 && arith1 = i85:0 + 1 6.34/2.57 6.34/2.57 Arcs: 6.34/2.57 (1) -> (1) 6.34/2.57 6.34/2.57 This digraph is fully evaluated! 6.34/2.57 ---------------------------------------- 6.34/2.57 6.34/2.57 (12) 6.34/2.57 Obligation: 6.34/2.57 6.34/2.57 Termination digraph: 6.34/2.57 Nodes: 6.34/2.57 (1) f748_0_take_Load(i84:0, java.lang.Object(From(i85:0)), java.lang.Object(ARRAY(i84:0)), i86:0, i85:0, i84:0) -> f748_0_take_Load(i84:0, java.lang.Object(From(arith1)), java.lang.Object(ARRAY(i84:0)), arith, arith1, i84:0) :|: i86:0 < i84:0 && i85:0 > -1 && arith = i86:0 + 1 && arith1 = i85:0 + 1 && arith1 = i85:0 + 1 6.34/2.57 6.34/2.57 Arcs: 6.34/2.57 (1) -> (1) 6.34/2.57 6.34/2.57 This digraph is fully evaluated! 6.34/2.57 6.34/2.57 ---------------------------------------- 6.34/2.57 6.34/2.57 (13) IntTRSCompressionProof (EQUIVALENT) 6.34/2.57 Compressed rules. 6.34/2.57 ---------------------------------------- 6.34/2.57 6.34/2.57 (14) 6.34/2.57 Obligation: 6.34/2.57 Rules: 6.34/2.57 f748_0_take_Load(i84:0:0, java.lang.Object(From(i85:0:0)), java.lang.Object(ARRAY(i84:0:0)), i86:0:0, i85:0:0, i84:0:0) -> f748_0_take_Load(i84:0:0, java.lang.Object(From(i85:0:0 + 1)), java.lang.Object(ARRAY(i84:0:0)), i86:0:0 + 1, i85:0:0 + 1, i84:0:0) :|: i86:0:0 < i84:0:0 && i85:0:0 > -1 6.34/2.57 6.34/2.57 ---------------------------------------- 6.34/2.57 6.34/2.57 (15) TempFilterProof (SOUND) 6.34/2.57 Used the following sort dictionary for filtering: 6.34/2.57 f748_0_take_Load(INTEGER, VARIABLE, VARIABLE, INTEGER, INTEGER, INTEGER) 6.34/2.57 java.lang.Object(VARIABLE) 6.34/2.57 From(INTEGER) 6.34/2.57 ARRAY(INTEGER) 6.34/2.57 Replaced non-predefined constructor symbols by 0. 6.34/2.57 ---------------------------------------- 6.34/2.57 6.34/2.57 (16) 6.34/2.57 Obligation: 6.34/2.57 Rules: 6.34/2.57 f748_0_take_Load(i84:0:0, c, c1, i86:0:0, i85:0:0, i84:0:0) -> f748_0_take_Load(i84:0:0, c2, c3, c4, c5, i84:0:0) :|: c5 = i85:0:0 + 1 && (c4 = i86:0:0 + 1 && (c3 = 0 && (c2 = 0 && (c1 = 0 && c = 0)))) && (i86:0:0 < i84:0:0 && i85:0:0 > -1) 6.34/2.57 6.34/2.57 ---------------------------------------- 6.34/2.57 6.34/2.57 (17) PolynomialOrderProcessor (EQUIVALENT) 6.34/2.57 Found the following polynomial interpretation: 6.34/2.57 [f748_0_take_Load(x, x1, x2, x3, x4, x5)] = x + c1*x1 + c2*x2 - x3 6.34/2.57 6.34/2.57 The following rules are decreasing: 6.34/2.57 f748_0_take_Load(i84:0:0, c, c1, i86:0:0, i85:0:0, i84:0:0) -> f748_0_take_Load(i84:0:0, c2, c3, c4, c5, i84:0:0) :|: c5 = i85:0:0 + 1 && (c4 = i86:0:0 + 1 && (c3 = 0 && (c2 = 0 && (c1 = 0 && c = 0)))) && (i86:0:0 < i84:0:0 && i85:0:0 > -1) 6.34/2.57 The following rules are bounded: 6.34/2.57 f748_0_take_Load(i84:0:0, c, c1, i86:0:0, i85:0:0, i84:0:0) -> f748_0_take_Load(i84:0:0, c2, c3, c4, c5, i84:0:0) :|: c5 = i85:0:0 + 1 && (c4 = i86:0:0 + 1 && (c3 = 0 && (c2 = 0 && (c1 = 0 && c = 0)))) && (i86:0:0 < i84:0:0 && i85:0:0 > -1) 6.34/2.57 6.34/2.57 ---------------------------------------- 6.34/2.57 6.34/2.57 (18) 6.34/2.57 YES 6.53/2.63 EOF