8.06/3.14 YES 8.06/3.15 proof of /export/starexec/sandbox2/benchmark/theBenchmark.jar 8.06/3.15 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 8.06/3.15 8.06/3.15 8.06/3.15 termination of the given Bare JBC problem could be proven: 8.06/3.15 8.06/3.15 (0) Bare JBC problem 8.06/3.15 (1) BareJBCToJBCProof [EQUIVALENT, 96 ms] 8.06/3.15 (2) JBC problem 8.06/3.15 (3) JBCToGraph [EQUIVALENT, 343 ms] 8.06/3.15 (4) JBCTerminationGraph 8.06/3.15 (5) TerminationGraphToSCCProof [SOUND, 0 ms] 8.06/3.15 (6) JBCTerminationSCC 8.06/3.15 (7) SCCToIRSProof [SOUND, 73 ms] 8.06/3.15 (8) IRSwT 8.06/3.15 (9) IRSFormatTransformerProof [EQUIVALENT, 0 ms] 8.06/3.15 (10) IRSwT 8.06/3.15 (11) IRSwTTerminationDigraphProof [EQUIVALENT, 51 ms] 8.06/3.15 (12) IRSwT 8.06/3.15 (13) IntTRSCompressionProof [EQUIVALENT, 0 ms] 8.06/3.15 (14) IRSwT 8.06/3.15 (15) TempFilterProof [SOUND, 45 ms] 8.06/3.15 (16) IntTRS 8.06/3.15 (17) PolynomialOrderProcessor [EQUIVALENT, 0 ms] 8.06/3.15 (18) IntTRS 8.06/3.15 (19) RankingReductionPairProof [EQUIVALENT, 0 ms] 8.06/3.15 (20) YES 8.06/3.15 8.06/3.15 8.06/3.15 ---------------------------------------- 8.06/3.15 8.06/3.15 (0) 8.06/3.15 Obligation: 8.06/3.15 need to prove termination of the following program: 8.06/3.15 public class GCD2 { 8.06/3.15 public static int mod(int a, int b) { 8.06/3.15 if (a == b) { 8.06/3.15 return 0; 8.06/3.15 } 8.06/3.15 while(a>b) { 8.06/3.15 a -= b; 8.06/3.15 } 8.06/3.15 return a; 8.06/3.15 } 8.06/3.15 8.06/3.15 public static int gcd(int a, int b) { 8.06/3.15 int tmp; 8.06/3.15 while(b != 0 && a >= 0 && b >= 0) { 8.06/3.15 tmp = b; 8.06/3.15 b = mod(a, b); 8.06/3.15 a = tmp; 8.06/3.15 } 8.06/3.15 return a; 8.06/3.15 } 8.06/3.15 8.06/3.15 public static void main(String[] args) { 8.06/3.15 Random.args = args; 8.06/3.15 int x = Random.random(); 8.06/3.15 int y = Random.random(); 8.06/3.15 gcd(x, y); 8.06/3.15 } 8.06/3.15 } 8.06/3.15 8.06/3.15 8.06/3.15 public class Random { 8.06/3.15 static String[] args; 8.06/3.15 static int index = 0; 8.06/3.15 8.06/3.15 public static int random() { 8.06/3.15 String string = args[index]; 8.06/3.15 index++; 8.06/3.15 return string.length(); 8.06/3.15 } 8.06/3.15 } 8.06/3.15 8.06/3.15 8.06/3.15 8.06/3.15 ---------------------------------------- 8.06/3.15 8.06/3.15 (1) BareJBCToJBCProof (EQUIVALENT) 8.06/3.15 initialized classpath 8.06/3.15 ---------------------------------------- 8.06/3.15 8.06/3.15 (2) 8.06/3.15 Obligation: 8.06/3.15 need to prove termination of the following program: 8.06/3.15 public class GCD2 { 8.06/3.15 public static int mod(int a, int b) { 8.06/3.15 if (a == b) { 8.06/3.15 return 0; 8.06/3.15 } 8.06/3.15 while(a>b) { 8.06/3.15 a -= b; 8.06/3.15 } 8.06/3.15 return a; 8.06/3.15 } 8.06/3.15 8.06/3.15 public static int gcd(int a, int b) { 8.06/3.15 int tmp; 8.06/3.15 while(b != 0 && a >= 0 && b >= 0) { 8.06/3.15 tmp = b; 8.06/3.15 b = mod(a, b); 8.06/3.15 a = tmp; 8.06/3.15 } 8.06/3.15 return a; 8.06/3.15 } 8.06/3.15 8.06/3.15 public static void main(String[] args) { 8.06/3.15 Random.args = args; 8.06/3.15 int x = Random.random(); 8.06/3.15 int y = Random.random(); 8.06/3.15 gcd(x, y); 8.06/3.15 } 8.06/3.15 } 8.06/3.15 8.06/3.15 8.06/3.15 public class Random { 8.06/3.15 static String[] args; 8.06/3.15 static int index = 0; 8.06/3.15 8.06/3.15 public static int random() { 8.06/3.15 String string = args[index]; 8.06/3.15 index++; 8.06/3.15 return string.length(); 8.06/3.15 } 8.06/3.15 } 8.06/3.15 8.06/3.15 8.06/3.15 8.06/3.15 ---------------------------------------- 8.06/3.15 8.06/3.15 (3) JBCToGraph (EQUIVALENT) 8.06/3.15 Constructed TerminationGraph. 8.06/3.15 ---------------------------------------- 8.06/3.15 8.06/3.15 (4) 8.06/3.15 Obligation: 8.06/3.15 Termination Graph based on JBC Program: 8.06/3.15 GCD2.main([Ljava/lang/String;)V: Graph of 213 nodes with 1 SCC. 8.06/3.15 8.06/3.15 8.06/3.15 8.06/3.15 8.06/3.15 8.06/3.15 ---------------------------------------- 8.06/3.15 8.06/3.15 (5) TerminationGraphToSCCProof (SOUND) 8.06/3.15 Splitted TerminationGraph to 1 SCCs. 8.06/3.15 ---------------------------------------- 8.06/3.15 8.06/3.15 (6) 8.06/3.15 Obligation: 8.06/3.15 SCC of termination graph based on JBC Program. 8.06/3.15 SCC contains nodes from the following methods: GCD2.main([Ljava/lang/String;)V 8.06/3.15 SCC calls the following helper methods: 8.06/3.15 Performed SCC analyses: 8.06/3.15 *Used field analysis yielded the following read fields: 8.06/3.15 8.06/3.15 *Marker field analysis yielded the following relations that could be markers: 8.06/3.15 8.06/3.15 ---------------------------------------- 8.06/3.15 8.06/3.15 (7) SCCToIRSProof (SOUND) 8.06/3.15 Transformed FIGraph SCCs to intTRSs. Log: 8.06/3.15 Generated rules. Obtained 42 IRulesP rules: 8.06/3.15 f337_0_gcd_EQ(EOS(STATIC_337), i19, i45, i45) -> f340_0_gcd_EQ(EOS(STATIC_340), i19, i45, i45) :|: TRUE 8.06/3.15 f340_0_gcd_EQ(EOS(STATIC_340), i19, i45, i45) -> f344_0_gcd_Load(EOS(STATIC_344), i19, i45) :|: i45 > 0 8.06/3.15 f344_0_gcd_Load(EOS(STATIC_344), i19, i45) -> f348_0_gcd_LT(EOS(STATIC_348), i19, i45, i19) :|: TRUE 8.06/3.15 f348_0_gcd_LT(EOS(STATIC_348), i19, i45, i19) -> f352_0_gcd_Load(EOS(STATIC_352), i19, i45) :|: i19 >= 0 8.06/3.15 f352_0_gcd_Load(EOS(STATIC_352), i19, i45) -> f356_0_gcd_LT(EOS(STATIC_356), i19, i45, i45) :|: TRUE 8.06/3.15 f356_0_gcd_LT(EOS(STATIC_356), i19, i45, i45) -> f360_0_gcd_Load(EOS(STATIC_360), i19, i45) :|: i45 >= 0 8.06/3.15 f360_0_gcd_Load(EOS(STATIC_360), i19, i45) -> f364_0_gcd_Store(EOS(STATIC_364), i19, i45, i45) :|: TRUE 8.06/3.15 f364_0_gcd_Store(EOS(STATIC_364), i19, i45, i45) -> f367_0_gcd_Load(EOS(STATIC_367), i19, i45, i45) :|: TRUE 8.06/3.15 f367_0_gcd_Load(EOS(STATIC_367), i19, i45, i45) -> f369_0_gcd_Load(EOS(STATIC_369), i45, i45, i19) :|: TRUE 8.06/3.15 f369_0_gcd_Load(EOS(STATIC_369), i45, i45, i19) -> f371_0_gcd_InvokeMethod(EOS(STATIC_371), i45, i19, i45) :|: TRUE 8.06/3.15 f371_0_gcd_InvokeMethod(EOS(STATIC_371), i45, i19, i45) -> f373_0_mod_Load(EOS(STATIC_373), i45, i19, i45) :|: TRUE 8.06/3.15 f373_0_mod_Load(EOS(STATIC_373), i45, i19, i45) -> f375_0_mod_Load(EOS(STATIC_375), i45, i19, i45, i19) :|: TRUE 8.06/3.15 f375_0_mod_Load(EOS(STATIC_375), i45, i19, i45, i19) -> f376_0_mod_NE(EOS(STATIC_376), i45, i19, i45, i19, i45) :|: TRUE 8.06/3.15 f376_0_mod_NE(EOS(STATIC_376), i45, i19, i45, i19, i45) -> f377_0_mod_NE(EOS(STATIC_377), i45, i19, i45, i19, i45) :|: !(i19 = i45) 8.06/3.15 f376_0_mod_NE(EOS(STATIC_376), i45, i45, i45, i45, i45) -> f378_0_mod_NE(EOS(STATIC_378), i45, i45, i45, i45, i45) :|: i19 = i45 8.06/3.15 f377_0_mod_NE(EOS(STATIC_377), i45, i19, i45, i19, i45) -> f382_0_mod_Load(EOS(STATIC_382), i45, i19, i45) :|: !(i19 = i45) 8.06/3.15 f382_0_mod_Load(EOS(STATIC_382), i45, i19, i45) -> f478_0_mod_Load(EOS(STATIC_478), i45, i19, i45) :|: TRUE 8.06/3.15 f478_0_mod_Load(EOS(STATIC_478), i45, i53, i45) -> f497_0_mod_Load(EOS(STATIC_497), i45, i53, i45, i53) :|: TRUE 8.06/3.15 f497_0_mod_Load(EOS(STATIC_497), i45, i53, i45, i53) -> f1040_0_mod_LE(EOS(STATIC_1040), i45, i53, i45, i53, i45) :|: TRUE 8.06/3.15 f1040_0_mod_LE(EOS(STATIC_1040), i45, i53, i45, i53, i45) -> f1048_0_mod_LE(EOS(STATIC_1048), i45, i53, i45, i53, i45) :|: i53 <= i45 8.06/3.15 f1040_0_mod_LE(EOS(STATIC_1040), i45, i53, i45, i53, i45) -> f1049_0_mod_LE(EOS(STATIC_1049), i45, i53, i45, i53, i45) :|: i53 > i45 8.06/3.15 f1048_0_mod_LE(EOS(STATIC_1048), i45, i53, i45, i53, i45) -> f1051_0_mod_Load(EOS(STATIC_1051), i45, i53) :|: i53 <= i45 8.06/3.15 f1051_0_mod_Load(EOS(STATIC_1051), i45, i53) -> f1062_0_mod_Return(EOS(STATIC_1062), i45, i53) :|: TRUE 8.06/3.15 f1062_0_mod_Return(EOS(STATIC_1062), i45, i53) -> f1074_0_gcd_Store(EOS(STATIC_1074), i45, i53) :|: TRUE 8.06/3.15 f1074_0_gcd_Store(EOS(STATIC_1074), i45, i53) -> f1076_0_gcd_Load(EOS(STATIC_1076), i53, i45) :|: TRUE 8.06/3.15 f1076_0_gcd_Load(EOS(STATIC_1076), i53, i45) -> f1083_0_gcd_Store(EOS(STATIC_1083), i53, i45) :|: TRUE 8.06/3.15 f1083_0_gcd_Store(EOS(STATIC_1083), i53, i45) -> f1085_0_gcd_JMP(EOS(STATIC_1085), i45, i53) :|: TRUE 8.06/3.15 f1085_0_gcd_JMP(EOS(STATIC_1085), i45, i53) -> f1095_0_gcd_Load(EOS(STATIC_1095), i45, i53) :|: TRUE 8.06/3.15 f1095_0_gcd_Load(EOS(STATIC_1095), i45, i53) -> f332_0_gcd_Load(EOS(STATIC_332), i45, i53) :|: TRUE 8.06/3.15 f332_0_gcd_Load(EOS(STATIC_332), i19, i43) -> f337_0_gcd_EQ(EOS(STATIC_337), i19, i43, i43) :|: TRUE 8.06/3.15 f1049_0_mod_LE(EOS(STATIC_1049), i45, i53, i45, i53, i45) -> f1059_0_mod_Load(EOS(STATIC_1059), i45, i53, i45) :|: i53 > i45 8.06/3.15 f1059_0_mod_Load(EOS(STATIC_1059), i45, i53, i45) -> f1064_0_mod_Load(EOS(STATIC_1064), i45, i45, i53) :|: TRUE 8.06/3.15 f1064_0_mod_Load(EOS(STATIC_1064), i45, i45, i53) -> f1075_0_mod_IntArithmetic(EOS(STATIC_1075), i45, i45, i53, i45) :|: TRUE 8.06/3.15 f1075_0_mod_IntArithmetic(EOS(STATIC_1075), i45, i45, i53, i45) -> f1082_0_mod_Store(EOS(STATIC_1082), i45, i45, i53 - i45) :|: i53 > 0 && i45 > 0 8.06/3.15 f1082_0_mod_Store(EOS(STATIC_1082), i45, i45, i81) -> f1084_0_mod_JMP(EOS(STATIC_1084), i45, i81, i45) :|: TRUE 8.06/3.15 f1084_0_mod_JMP(EOS(STATIC_1084), i45, i81, i45) -> f1090_0_mod_Load(EOS(STATIC_1090), i45, i81, i45) :|: TRUE 8.06/3.15 f1090_0_mod_Load(EOS(STATIC_1090), i45, i81, i45) -> f478_0_mod_Load(EOS(STATIC_478), i45, i81, i45) :|: TRUE 8.06/3.15 f378_0_mod_NE(EOS(STATIC_378), i45, i45, i45, i45, i45) -> f384_0_mod_ConstantStackPush(EOS(STATIC_384), i45) :|: TRUE 8.06/3.15 f384_0_mod_ConstantStackPush(EOS(STATIC_384), i45) -> f387_0_mod_Return(EOS(STATIC_387), i45, 0) :|: TRUE 8.06/3.15 f387_0_mod_Return(EOS(STATIC_387), i45, matching1) -> f389_0_gcd_Store(EOS(STATIC_389), i45, 0) :|: TRUE && matching1 = 0 8.06/3.15 f389_0_gcd_Store(EOS(STATIC_389), i45, matching1) -> f425_0_gcd_Store(EOS(STATIC_425), i45, 0) :|: TRUE && matching1 = 0 8.06/3.15 f425_0_gcd_Store(EOS(STATIC_425), i45, i19) -> f1074_0_gcd_Store(EOS(STATIC_1074), i45, i19) :|: TRUE 8.06/3.15 Combined rules. Obtained 5 IRulesP rules: 8.06/3.15 f1040_0_mod_LE(EOS(STATIC_1040), i45:0, i53:0, i45:0, i53:0, i45:0) -> f337_0_gcd_EQ(EOS(STATIC_337), i45:0, i53:0, i53:0) :|: i53:0 <= i45:0 8.06/3.15 f337_0_gcd_EQ(EOS(STATIC_337), i19:0, i45:0, i45:0) -> f1040_0_mod_LE(EOS(STATIC_1040), i45:0, i19:0, i45:0, i19:0, i45:0) :|: i45:0 > 0 && i19:0 > -1 && i45:0 > i19:0 8.06/3.15 f337_0_gcd_EQ(EOS(STATIC_337), i19:0, i45:0, i45:0) -> f1040_0_mod_LE(EOS(STATIC_1040), i45:0, i19:0, i45:0, i19:0, i45:0) :|: i45:0 > 0 && i19:0 > -1 && i45:0 < i19:0 8.06/3.15 f337_0_gcd_EQ(EOS(STATIC_337), i19:0, i19:0, i19:0) -> f337_0_gcd_EQ(EOS(STATIC_337), i19:0, 0, 0) :|: i19:0 > 0 8.06/3.15 f1040_0_mod_LE(EOS(STATIC_1040), i45:0, i53:0, i45:0, i53:0, i45:0) -> f1040_0_mod_LE(EOS(STATIC_1040), i45:0, i53:0 - i45:0, i45:0, i53:0 - i45:0, i45:0) :|: i53:0 > i45:0 && i53:0 > 0 && i45:0 > 0 8.06/3.15 Filtered constant ground arguments: 8.06/3.15 f1040_0_mod_LE(x1, x2, x3, x4, x5, x6) -> f1040_0_mod_LE(x2, x3, x4, x5, x6) 8.06/3.15 f337_0_gcd_EQ(x1, x2, x3, x4) -> f337_0_gcd_EQ(x2, x3, x4) 8.06/3.15 Filtered duplicate arguments: 8.06/3.15 f1040_0_mod_LE(x1, x2, x3, x4, x5) -> f1040_0_mod_LE(x4, x5) 8.06/3.15 f337_0_gcd_EQ(x1, x2, x3) -> f337_0_gcd_EQ(x1, x3) 8.06/3.15 Finished conversion. Obtained 5 rules.P rules: 8.06/3.15 f1040_0_mod_LE(i53:0, i45:0) -> f337_0_gcd_EQ(i45:0, i53:0) :|: i53:0 <= i45:0 8.06/3.15 f337_0_gcd_EQ(i19:0, i45:0) -> f1040_0_mod_LE(i19:0, i45:0) :|: i19:0 > -1 && i45:0 > i19:0 && i45:0 > 0 8.06/3.15 f337_0_gcd_EQ(i19:0, i45:0) -> f1040_0_mod_LE(i19:0, i45:0) :|: i19:0 > -1 && i45:0 < i19:0 && i45:0 > 0 8.06/3.15 f337_0_gcd_EQ(i19:0, i19:0) -> f337_0_gcd_EQ(i19:0, 0) :|: i19:0 > 0 8.06/3.15 f1040_0_mod_LE(i53:0, i45:0) -> f1040_0_mod_LE(i53:0 - i45:0, i45:0) :|: i53:0 > 0 && i45:0 > 0 && i53:0 > i45:0 8.06/3.15 8.06/3.15 ---------------------------------------- 8.06/3.15 8.06/3.15 (8) 8.06/3.15 Obligation: 8.06/3.15 Rules: 8.06/3.15 f1040_0_mod_LE(i53:0, i45:0) -> f337_0_gcd_EQ(i45:0, i53:0) :|: i53:0 <= i45:0 8.06/3.15 f337_0_gcd_EQ(x, x1) -> f1040_0_mod_LE(x, x1) :|: x > -1 && x1 > x && x1 > 0 8.06/3.15 f337_0_gcd_EQ(x2, x3) -> f1040_0_mod_LE(x2, x3) :|: x2 > -1 && x3 < x2 && x3 > 0 8.06/3.15 f337_0_gcd_EQ(i19:0, i19:0) -> f337_0_gcd_EQ(i19:0, 0) :|: i19:0 > 0 8.06/3.15 f1040_0_mod_LE(x4, x5) -> f1040_0_mod_LE(x4 - x5, x5) :|: x4 > 0 && x5 > 0 && x4 > x5 8.06/3.15 8.06/3.15 ---------------------------------------- 8.06/3.15 8.06/3.15 (9) IRSFormatTransformerProof (EQUIVALENT) 8.06/3.15 Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). 8.06/3.15 ---------------------------------------- 8.06/3.15 8.06/3.15 (10) 8.06/3.15 Obligation: 8.06/3.15 Rules: 8.06/3.15 f1040_0_mod_LE(i53:0, i45:0) -> f337_0_gcd_EQ(i45:0, i53:0) :|: i53:0 <= i45:0 8.06/3.15 f337_0_gcd_EQ(x, x1) -> f1040_0_mod_LE(x, x1) :|: x > -1 && x1 > x && x1 > 0 8.06/3.15 f337_0_gcd_EQ(x2, x3) -> f1040_0_mod_LE(x2, x3) :|: x2 > -1 && x3 < x2 && x3 > 0 8.06/3.15 f337_0_gcd_EQ(i19:0, i19:0) -> f337_0_gcd_EQ(i19:0, 0) :|: i19:0 > 0 8.06/3.15 f1040_0_mod_LE(x4, x5) -> f1040_0_mod_LE(arith, x5) :|: x4 > 0 && x5 > 0 && x4 > x5 && arith = x4 - x5 8.06/3.15 8.06/3.15 ---------------------------------------- 8.06/3.15 8.06/3.15 (11) IRSwTTerminationDigraphProof (EQUIVALENT) 8.06/3.15 Constructed termination digraph! 8.06/3.15 Nodes: 8.06/3.15 (1) f1040_0_mod_LE(i53:0, i45:0) -> f337_0_gcd_EQ(i45:0, i53:0) :|: i53:0 <= i45:0 8.06/3.15 (2) f337_0_gcd_EQ(x, x1) -> f1040_0_mod_LE(x, x1) :|: x > -1 && x1 > x && x1 > 0 8.06/3.15 (3) f337_0_gcd_EQ(x2, x3) -> f1040_0_mod_LE(x2, x3) :|: x2 > -1 && x3 < x2 && x3 > 0 8.06/3.15 (4) f337_0_gcd_EQ(i19:0, i19:0) -> f337_0_gcd_EQ(i19:0, 0) :|: i19:0 > 0 8.06/3.15 (5) f1040_0_mod_LE(x4, x5) -> f1040_0_mod_LE(arith, x5) :|: x4 > 0 && x5 > 0 && x4 > x5 && arith = x4 - x5 8.06/3.15 8.06/3.15 Arcs: 8.06/3.15 (1) -> (3), (4) 8.06/3.15 (2) -> (1) 8.06/3.15 (3) -> (5) 8.06/3.15 (5) -> (1), (5) 8.06/3.15 8.06/3.15 This digraph is fully evaluated! 8.06/3.15 ---------------------------------------- 8.06/3.15 8.06/3.15 (12) 8.06/3.15 Obligation: 8.06/3.15 8.06/3.15 Termination digraph: 8.06/3.15 Nodes: 8.06/3.15 (1) f1040_0_mod_LE(i53:0, i45:0) -> f337_0_gcd_EQ(i45:0, i53:0) :|: i53:0 <= i45:0 8.06/3.15 (2) f1040_0_mod_LE(x4, x5) -> f1040_0_mod_LE(arith, x5) :|: x4 > 0 && x5 > 0 && x4 > x5 && arith = x4 - x5 8.06/3.15 (3) f337_0_gcd_EQ(x2, x3) -> f1040_0_mod_LE(x2, x3) :|: x2 > -1 && x3 < x2 && x3 > 0 8.06/3.15 8.06/3.15 Arcs: 8.06/3.15 (1) -> (3) 8.06/3.15 (2) -> (1), (2) 8.06/3.15 (3) -> (2) 8.06/3.15 8.06/3.15 This digraph is fully evaluated! 8.06/3.15 8.06/3.15 ---------------------------------------- 8.06/3.15 8.06/3.15 (13) IntTRSCompressionProof (EQUIVALENT) 8.06/3.15 Compressed rules. 8.06/3.15 ---------------------------------------- 8.06/3.15 8.06/3.15 (14) 8.06/3.15 Obligation: 8.06/3.15 Rules: 8.06/3.15 f1040_0_mod_LE(x4:0, x5:0) -> f1040_0_mod_LE(x4:0 - x5:0, x5:0) :|: x4:0 > 0 && x5:0 > 0 && x5:0 < x4:0 8.06/3.15 f1040_0_mod_LE(i53:0:0, i45:0:0) -> f1040_0_mod_LE(i45:0:0, i53:0:0) :|: i45:0:0 > -1 && i53:0:0 < i45:0:0 && i53:0:0 > 0 8.06/3.15 8.06/3.15 ---------------------------------------- 8.06/3.15 8.06/3.15 (15) TempFilterProof (SOUND) 8.06/3.15 Used the following sort dictionary for filtering: 8.06/3.15 f1040_0_mod_LE(INTEGER, INTEGER) 8.06/3.15 Replaced non-predefined constructor symbols by 0. 8.06/3.15 ---------------------------------------- 8.06/3.15 8.06/3.15 (16) 8.06/3.15 Obligation: 8.06/3.15 Rules: 8.06/3.15 f1040_0_mod_LE(x4:0, x5:0) -> f1040_0_mod_LE(c, x5:0) :|: c = x4:0 - x5:0 && (x4:0 > 0 && x5:0 > 0 && x5:0 < x4:0) 8.06/3.15 f1040_0_mod_LE(i53:0:0, i45:0:0) -> f1040_0_mod_LE(i45:0:0, i53:0:0) :|: i45:0:0 > -1 && i53:0:0 < i45:0:0 && i53:0:0 > 0 8.06/3.15 8.06/3.15 ---------------------------------------- 8.06/3.15 8.06/3.15 (17) PolynomialOrderProcessor (EQUIVALENT) 8.06/3.15 Found the following polynomial interpretation: 8.06/3.15 [f1040_0_mod_LE(x, x1)] = -2 + x1 8.06/3.15 8.06/3.15 The following rules are decreasing: 8.06/3.15 f1040_0_mod_LE(i53:0:0, i45:0:0) -> f1040_0_mod_LE(i45:0:0, i53:0:0) :|: i45:0:0 > -1 && i53:0:0 < i45:0:0 && i53:0:0 > 0 8.06/3.15 The following rules are bounded: 8.06/3.15 f1040_0_mod_LE(i53:0:0, i45:0:0) -> f1040_0_mod_LE(i45:0:0, i53:0:0) :|: i45:0:0 > -1 && i53:0:0 < i45:0:0 && i53:0:0 > 0 8.06/3.15 8.06/3.15 ---------------------------------------- 8.06/3.15 8.06/3.15 (18) 8.06/3.15 Obligation: 8.06/3.15 Rules: 8.06/3.15 f1040_0_mod_LE(x4:0, x5:0) -> f1040_0_mod_LE(c, x5:0) :|: c = x4:0 - x5:0 && (x4:0 > 0 && x5:0 > 0 && x5:0 < x4:0) 8.06/3.15 8.06/3.15 ---------------------------------------- 8.06/3.15 8.06/3.15 (19) RankingReductionPairProof (EQUIVALENT) 8.06/3.15 Interpretation: 8.06/3.15 [ f1040_0_mod_LE ] = f1040_0_mod_LE_1 8.06/3.15 8.06/3.15 The following rules are decreasing: 8.06/3.15 f1040_0_mod_LE(x4:0, x5:0) -> f1040_0_mod_LE(c, x5:0) :|: c = x4:0 - x5:0 && (x4:0 > 0 && x5:0 > 0 && x5:0 < x4:0) 8.06/3.15 8.06/3.15 The following rules are bounded: 8.06/3.15 f1040_0_mod_LE(x4:0, x5:0) -> f1040_0_mod_LE(c, x5:0) :|: c = x4:0 - x5:0 && (x4:0 > 0 && x5:0 > 0 && x5:0 < x4:0) 8.06/3.15 8.06/3.15 8.06/3.15 ---------------------------------------- 8.06/3.15 8.06/3.15 (20) 8.06/3.15 YES 8.41/3.18 EOF