test/Tools/isac/Knowledge/rational.sml
changeset 52106 7f3760f39bdc
parent 52105 2786cc9704c8
child 55445 33b0f6db720c
equal deleted inserted replaced
52105:2786cc9704c8 52106:7f3760f39bdc
    35 "-------- interSteps ..Simp_Rat_Double_No-1.xml ------------------------------";
    35 "-------- interSteps ..Simp_Rat_Double_No-1.xml ------------------------------";
    36 "-------- interSteps ..Simp_Rat_Cancel_No-1.xml ------------------------------";
    36 "-------- interSteps ..Simp_Rat_Cancel_No-1.xml ------------------------------";
    37 "-------- investigate rulesets for cancel_p ----------------------------------";
    37 "-------- investigate rulesets for cancel_p ----------------------------------";
    38 "-------- fun eval_get_denominator -------------------------------------------";
    38 "-------- fun eval_get_denominator -------------------------------------------";
    39 "-------- several errpats in complicated term --------------------------------";
    39 "-------- several errpats in complicated term --------------------------------";
       
    40 "-------- WN1309xx non-terminating rls norm_Rational -------------------------";
    40 "-----------------------------------------------------------------------------";
    41 "-----------------------------------------------------------------------------";
    41 "-----------------------------------------------------------------------------";
    42 "-----------------------------------------------------------------------------";
    42 
    43 
    43 
    44 
    44 "-------- fun poly_of_term ---------------------------------------------------";
    45 "-------- fun poly_of_term ---------------------------------------------------";
  1636 (([6], Res), (25 + 5 * b) / (5 * (a * b) + 5 * b ^^^ 2)),
  1637 (([6], Res), (25 + 5 * b) / (5 * (a * b) + 5 * b ^^^ 2)),
  1637 (([7], Res), (5 + b) / (a * b + b ^^^ 2)),
  1638 (([7], Res), (5 + b) / (a * b + b ^^^ 2)),
  1638 (([], Res), (5 + b) / (a * b + b ^^^ 2))] *)
  1639 (([], Res), (5 + b) / (a * b + b ^^^ 2))] *)
  1639 
  1640 
  1640 
  1641 
  1641 
  1642 "-------- WN1309xx non-terminating rls norm_Rational -------------------------";
       
  1643 "-------- WN1309xx non-terminating rls norm_Rational -------------------------";
       
  1644 "-------- WN1309xx non-terminating rls norm_Rational -------------------------";
       
  1645 (*------- Schalk I, p.70 Nr. 480b; a/b : c/d translated to a/b * d/c*)
       
  1646 val t = str2term 
       
  1647   ("((12*x*y / (9*x^^^2 - y^^^2))  /  (1 / (3*x - y)^^^2 - 1 / (3*x + y)^^^2))  *  " ^
       
  1648 	"((1/(x - 5*y)^^^2  -  1/(x + 5*y)^^^2)  /  (20*x*y / (x^^^2 - 25*y^^^2)))");
       
  1649 
       
  1650 (*1st factor separately simplified *)
       
  1651 val t = str2term "((12*x*y / (9*x^^^2 - y^^^2))  /  (1 / (3*x - y)^^^2 - 1 / (3*x + y)^^^2))";
       
  1652 val SOME (t', _) = rewrite_set_ thy false norm_Rational t; 
       
  1653 if term2str t' = "(-9 * x ^^^ 2 + y ^^^ 2) / -1" then () else error "Nr. 480b lhs changed";
       
  1654 (*2nd factor separately simplified *)
       
  1655 val t = str2term "((1/(x - 5*y)^^^2  -  1/(x + 5*y)^^^2)  /  (20*x*y / (x^^^2 - 25*y^^^2)))";
       
  1656 val SOME (t',_) = rewrite_set_ thy false norm_Rational t; term2str t';
       
  1657 if term2str t' = "-1 / (-1 * x ^^^ 2 + 25 * y ^^^ 2)" then () else error "Nr. 480b rhs changed";
       
  1658 
       
  1659 "-------- Schalk I, p.70 Nr. 477a: terms are exploding ?!?";
       
  1660 val t = str2term ("b*y/(b - 2*y)/((b^^^2 - y^^^2)/(b+2*y))  /" ^
       
  1661 		 "(b^^^2*y + b*y^^^2) * (a+x)^^^2  /  ((b^^^2 - 4*y^^^2) * (a+2*x)^^^2)");
       
  1662 (*val SOME (t',_) = rewrite_set_ thy false norm_Rational t;
       
  1663 :
       
  1664 ###  rls: cancel_p on: (a ^^^ 2 * (b * y) + 2 * (a * (b * (x * y))) + b * (x ^^^ 2 * y)) /
       
  1665 (b + -2 * y) /
       
  1666 ((b ^^^ 2 + -1 * y ^^^ 2) / (b + 2 * y)) /
       
  1667 (b ^^^ 2 * y + b * y ^^^ 2) /
       
  1668 (a ^^^ 2 * b ^^^ 2 + -4 * (a ^^^ 2 * y ^^^ 2) + 4 * (a * (b ^^^ 2 * x)) +
       
  1669  -16 * (a * (x * y ^^^ 2)) +
       
  1670  4 * (b ^^^ 2 * x ^^^ 2) +
       
  1671  -16 * (x ^^^ 2 * y ^^^ 2)) 
       
  1672 exception Div raised
       
  1673 
       
  1674 BUT
       
  1675 val t = str2term 
       
  1676   ("(a ^^^ 2 * (b * y) + 2 * (a * (b * (x * y))) + b * (x ^^^ 2 * y)) /" ^
       
  1677   "(b + -2 * y) /" ^
       
  1678   "((b ^^^ 2 + -1 * y ^^^ 2) / (b + 2 * y)) /" ^
       
  1679   "(b ^^^ 2 * y + b * y ^^^ 2) /" ^
       
  1680   "(a ^^^ 2 * b ^^^ 2 + -4 * (a ^^^ 2 * y ^^^ 2) + 4 * (a * (b ^^^ 2 * x)) +" ^
       
  1681   "-16 * (a * (x * y ^^^ 2)) +" ^
       
  1682   "4 * (b ^^^ 2 * x ^^^ 2) +" ^
       
  1683   "-16 * (x ^^^ 2 * y ^^^ 2))");
       
  1684 NONE = cancel_p_ thy t;
       
  1685 *)
       
  1686 
       
  1687 (*------- Schalk I, p.70 Nr. 476b in 2003 this worked using 10 sec. *)
       
  1688 val t = str2term 
       
  1689   ("((a^^^2 - b^^^2)/(2*a*b) + 2*a*b/(a^^^2 - b^^^2))  /  ((a^^^2 + b^^^2)/(2*a*b) + 1)    / " ^
       
  1690    "((a^^^2 + b^^^2)^^^2  /  (a + b)^^^2)");
       
  1691 (*
       
  1692 trace_rewrite := true;
       
  1693 rewrite_set_ thy false norm_Rational t;
       
  1694 :
       
  1695 ####  rls: cancel_p on: (2 * (a ^^^ 7 * b) + 4 * (a ^^^ 6 * b ^^^ 2) + 6 * (a ^^^ 5 * b ^^^ 3) +
       
  1696  8 * (a ^^^ 4 * b ^^^ 4) +
       
  1697  6 * (a ^^^ 3 * b ^^^ 5) +
       
  1698  4 * (a ^^^ 2 * b ^^^ 6) +
       
  1699  2 * (a * b ^^^ 7)) /
       
  1700 (2 * (a ^^^ 9 * b) + 4 * (a ^^^ 8 * b ^^^ 2) +
       
  1701  2 * (2 * (a ^^^ 7 * b ^^^ 3)) +
       
  1702  4 * (a ^^^ 6 * b ^^^ 4) +
       
  1703  -4 * (a ^^^ 4 * b ^^^ 6) +
       
  1704  -4 * (a ^^^ 3 * b ^^^ 7) +
       
  1705  -4 * (a ^^^ 2 * b ^^^ 8) +
       
  1706  -2 * (a * b ^^^ 9))
       
  1707 
       
  1708 if term2str t = "1 / (a ^^^ 2 + -1 * b ^^^ 2)" then ()
       
  1709 else error "rational.sml: diff.behav. in norm_Rational_mg 49";
       
  1710 *)
       
  1711 
       
  1712 "-------- Schalk I, p.70 Nr. 480a: terms are exploding ?!?";
       
  1713 val t = str2term ("(1/x + 1/y + 1/z)  /  (1/x - 1/y - 1/z)  /  " ^
       
  1714   "(2*x^^^2 / (x^^^2 - z^^^2) / (x / (x + z)  +  x / (x - z)))");
       
  1715 (*
       
  1716 trace_rewrite := true;
       
  1717 rewrite_set_ thy false norm_Rational t;
       
  1718 :
       
  1719 ####  rls: cancel_p on: (2 * (x ^^^ 6 * (y ^^^ 2 * z)) + 2 * (x ^^^ 6 * (y * z ^^^ 2)) +
       
  1720  2 * (x ^^^ 5 * (y ^^^ 2 * z ^^^ 2)) +
       
  1721  -2 * (x ^^^ 4 * (y ^^^ 2 * z ^^^ 3)) +
       
  1722  -2 * (x ^^^ 4 * (y * z ^^^ 4)) +
       
  1723  -2 * (x ^^^ 3 * (y ^^^ 2 * z ^^^ 4))) /
       
  1724 (-2 * (x ^^^ 6 * (y ^^^ 2 * z)) + -2 * (x ^^^ 6 * (y * z ^^^ 2)) +
       
  1725  2 * (x ^^^ 5 * (y ^^^ 2 * z ^^^ 2)) +
       
  1726  2 * (x ^^^ 4 * (y ^^^ 2 * z ^^^ 3)) +
       
  1727  2 * (x ^^^ 4 * (y * z ^^^ 4)) +
       
  1728  -2 * (x ^^^ 3 * (y ^^^ 2 * z ^^^ 4)))
       
  1729 *)
       
  1730 
       
  1731 "-------- Schalk I, p.60 Nr. 215d: terms are exploding, internal loop does not terminate";
       
  1732 val t = str2term "(a-b)^^^3 * (x+y)^^^4 / ((x+y)^^^2 * (a-b)^^^5)";
       
  1733 (* Kein Wunder, denn Z???ler und Nenner extra als Polynom dargestellt ergibt:
       
  1734 
       
  1735 val t = str2term "(a-b)^^^3 * (x+y)^^^4";
       
  1736 val SOME (t, _) = rewrite_set_ thy false norm_Rational t;
       
  1737 term2str t;
       
  1738 "a^^^3 * x^^^4 + 4 * a^^^3 * x^^^3 * y +6 * a^^^3 * x^^^2 * y^^^2 +4 * a^^^3 * x * y^^^3 +a^^^3 * y^^^4 +-3 * a^^^2 * b * x^^^4 +-12 * a^^^2 * b * x^^^3 * y +-18 * a^^^2 * b * x^^^2 * y^^^2 +-12 * a^^^2 * b * x * y^^^3 +-3 * a^^^2 * b * y^^^4 +3 * a * b^^^2 * x^^^4 +12 * a * b^^^2 * x^^^3 * y +18 * a * b^^^2 * x^^^2 * y^^^2 +12 * a * b^^^2 * x * y^^^3 +3 * a * b^^^2 * y^^^4 +-1 * b^^^3 * x^^^4 +-4 * b^^^3 * x^^^3 * y +-6 * b^^^3 * x^^^2 * y^^^2 +-4 * b^^^3 * x * y^^^3 +-1 * b^^^3 * y^^^4";
       
  1739 val t = str2term "((x+y)^^^2 * (a-b)^^^5)";
       
  1740 val SOME (t, _) = rewrite_set_ thy false norm_Rational t;
       
  1741 term2str t;
       
  1742 "a^^^5 * x^^^2 + 2 * a^^^5 * x * y + a^^^5 * y^^^2 +-5 * a^^^4 * b * x^^^2 +-10 * a^^^4 * b * x * y +-5 * a^^^4 * b * y^^^2 +10 * a^^^3 * b^^^2 * x^^^2 +20 * a^^^3 * b^^^2 * x * y +10 * a^^^3 * b^^^2 * y^^^2 +-10 * a^^^2 * b^^^3 * x^^^2 +-20 * a^^^2 * b^^^3 * x * y +-10 * a^^^2 * b^^^3 * y^^^2 +5 * a * b^^^4 * x^^^2 +10 * a * b^^^4 * x * y +5 * a * b^^^4 * y^^^2 +-1 * b^^^5 * x^^^2 +-2 * b^^^5 * x * y +-1 * b^^^5 * y^^^2";
       
  1743 
       
  1744 anscheinend macht dem Rechner das Krzen diese Bruches keinen Spass mehr ...*)
       
  1745 
       
  1746 "-------- Schalk I, p.70 Nr. 480b: terms are exploding, trace_rewrite stops at";
       
  1747 val t = str2term ("((12*x*y/(9*x^^^2 - y^^^2))/" ^
       
  1748 		 "(1/(3*x - y)^^^2 - 1/(3*x + y)^^^2)) *" ^
       
  1749 		 "(1/(x - 5*y)^^^2 - 1/(x + 5*y)^^^2)/" ^
       
  1750 		 "(20*x*y/(x^^^2 - 25*y^^^2))");
       
  1751 (*val SOME (t, _) = rewrite_set_ thy false norm_Rational t;
       
  1752 :
       
  1753 ####  rls: cancel_p on: (19440 * (x ^^^ 8 * y ^^^ 2) + -490320 * (x ^^^ 6 * y ^^^ 4) +
       
  1754  108240 * (x ^^^ 4 * y ^^^ 6) +
       
  1755  -6000 * (x ^^^ 2 * y ^^^ 8)) /
       
  1756 (2160 * (x ^^^ 8 * y ^^^ 2) + -108240 * (x ^^^ 6 * y ^^^ 4) +
       
  1757  1362000 * (x ^^^ 4 * y ^^^ 6) +
       
  1758  -150000 * (x ^^^ 2 * y ^^^ 8))
       
  1759 *)
       
  1760