src/Tools/isac/Knowledge/Poly.thy
changeset 60385 d3a3cc2f0382
parent 60384 2b6e73df4e5d
child 60386 b7ea87559ad5
equal deleted inserted replaced
60384:2b6e73df4e5d 60385:d3a3cc2f0382
   107   real_plus_binom_pow3_poly: "[| a is_polyexp; b is_polyexp |] ==> 
   107   real_plus_binom_pow3_poly: "[| a is_polyexp; b is_polyexp |] ==> 
   108 			    (a + b) \<up> 3 = a \<up> 3 + 3*a \<up> 2*b + 3*a*b \<up> 2 + b \<up> 3" and
   108 			    (a + b) \<up> 3 = a \<up> 3 + 3*a \<up> 2*b + 3*a*b \<up> 2 + b \<up> 3" and
   109   real_minus_binom_pow3:   "(a - b) \<up> 3 = a \<up> 3 - 3*a \<up> 2*b + 3*a*b \<up> 2 - b \<up> 3" and
   109   real_minus_binom_pow3:   "(a - b) \<up> 3 = a \<up> 3 - 3*a \<up> 2*b + 3*a*b \<up> 2 - b \<up> 3" and
   110   real_minus_binom_pow3_p: "(a + -1 * b) \<up> 3 = a \<up> 3 + -3*a \<up> 2*b + 3*a*b \<up> 2 +
   110   real_minus_binom_pow3_p: "(a + -1 * b) \<up> 3 = a \<up> 3 + -3*a \<up> 2*b + 3*a*b \<up> 2 +
   111                            -1*b \<up> 3" and
   111                            -1*b \<up> 3" and
   112 (* real_plus_binom_pow:        "[| n is_const;  3 < n |] ==>
   112 (* real_plus_binom_pow:        "[| n is_num;  3 < n |] ==>
   113 			       (a + b) \<up> n = (a + b) * (a + b)\<up>(n - 1)" *)
   113 			       (a + b) \<up> n = (a + b) * (a + b)\<up>(n - 1)" *)
   114   real_plus_binom_pow4:   "(a + b) \<up> 4 = (a \<up> 3 + 3*a \<up> 2*b + 3*a*b \<up> 2 + b \<up> 3)
   114   real_plus_binom_pow4:   "(a + b) \<up> 4 = (a \<up> 3 + 3*a \<up> 2*b + 3*a*b \<up> 2 + b \<up> 3)
   115                            *(a + b)" and
   115                            *(a + b)" and
   116   real_plus_binom_pow4_poly: "[| a is_polyexp; b is_polyexp |] ==> 
   116   real_plus_binom_pow4_poly: "[| a is_polyexp; b is_polyexp |] ==> 
   117 			   (a + b) \<up> 4 = (a \<up> 3 + 3*a \<up> 2*b + 3*a*b \<up> 2 + b \<up> 3)
   117 			   (a + b) \<up> 4 = (a \<up> 3 + 3*a \<up> 2*b + 3*a*b \<up> 2 + b \<up> 3)
   140   real_plus_minus_binom2_p:   "(a - b)*(a + b) = a \<up> 2 + -1*b \<up> 2" and
   140   real_plus_minus_binom2_p:   "(a - b)*(a + b) = a \<up> 2 + -1*b \<up> 2" and
   141   real_plus_minus_binom2_p_p: "(a + -1 * b)*(a + b) = a \<up> 2 + -1*b \<up> 2" and
   141   real_plus_minus_binom2_p_p: "(a + -1 * b)*(a + b) = a \<up> 2 + -1*b \<up> 2" and
   142   real_plus_binom_times1:     "(a +  1*b)*(a + -1*b) = a \<up> 2 + -1*b \<up> 2" and
   142   real_plus_binom_times1:     "(a +  1*b)*(a + -1*b) = a \<up> 2 + -1*b \<up> 2" and
   143   real_plus_binom_times2:     "(a + -1*b)*(a +  1*b) = a \<up> 2 + -1*b \<up> 2" and
   143   real_plus_binom_times2:     "(a + -1*b)*(a +  1*b) = a \<up> 2 + -1*b \<up> 2" and
   144 
   144 
   145   real_num_collect:           "[| l is_const; m is_const |] ==>
   145   real_num_collect:           "[| l is_num; m is_num |] ==>
   146 			      l * n + m * n = (l + m) * n" and
   146 			      l * n + m * n = (l + m) * n" and
   147 (* FIXME.MG.0401: replace 'real_num_collect_assoc' 
   147 (* FIXME.MG.0401: replace 'real_num_collect_assoc' 
   148 	by 'real_num_collect_assoc_l' ... are equal, introduced by MG ! *)
   148 	by 'real_num_collect_assoc_l' ... are equal, introduced by MG ! *)
   149   real_num_collect_assoc:     "[| l is_const; m is_const |] ==> 
   149   real_num_collect_assoc:     "[| l is_num; m is_num |] ==> 
   150 			      l * n + (m * n + k) = (l + m) * n + k" and
   150 			      l * n + (m * n + k) = (l + m) * n + k" and
   151   real_num_collect_assoc_l:   "[| l is_const; m is_const |] ==>
   151   real_num_collect_assoc_l:   "[| l is_num; m is_num |] ==>
   152 			      l * n + (m * n + k) = (l + m)
   152 			      l * n + (m * n + k) = (l + m)
   153 				* n + k" and
   153 				* n + k" and
   154   real_num_collect_assoc_r:   "[| l is_const; m is_const |] ==>
   154   real_num_collect_assoc_r:   "[| l is_num; m is_num |] ==>
   155 			      (k + m * n) + l * n = k + (l + m) * n" and
   155 			      (k + m * n) + l * n = k + (l + m) * n" and
   156   real_one_collect:           "m is_const ==> n + m * n = (1 + m) * n" and
   156   real_one_collect:           "m is_num ==> n + m * n = (1 + m) * n" and
   157 (* FIXME.MG.0401: replace 'real_one_collect_assoc' 
   157 (* FIXME.MG.0401: replace 'real_one_collect_assoc' 
   158 	by 'real_one_collect_assoc_l' ... are equal, introduced by MG ! *)
   158 	by 'real_one_collect_assoc_l' ... are equal, introduced by MG ! *)
   159   real_one_collect_assoc:     "m is_const ==> n + (m * n + k) = (1 + m)* n + k" and
   159   real_one_collect_assoc:     "m is_num ==> n + (m * n + k) = (1 + m)* n + k" and
   160 
   160 
   161   real_one_collect_assoc_l:   "m is_const ==> n + (m * n + k) = (1 + m) * n + k" and
   161   real_one_collect_assoc_l:   "m is_num ==> n + (m * n + k) = (1 + m) * n + k" and
   162   real_one_collect_assoc_r:  "m is_const ==> (k + n) +  m * n = k + (1 + m) * n" and
   162   real_one_collect_assoc_r:  "m is_num ==> (k + n) +  m * n = k + (1 + m) * n" and
   163 
   163 
   164 (* FIXME.MG.0401: replace 'real_mult_2_assoc' 
   164 (* FIXME.MG.0401: replace 'real_mult_2_assoc' 
   165 	by 'real_mult_2_assoc_l' ... are equal, introduced by MG ! *)
   165 	by 'real_mult_2_assoc_l' ... are equal, introduced by MG ! *)
   166   real_mult_2_assoc:          "z1 + (z1 + k) = 2 * z1 + k" and
   166   real_mult_2_assoc:          "z1 + (z1 + k) = 2 * z1 + k" and
   167   real_mult_2_assoc_l:        "z1 + (z1 + k) = 2 * z1 + k" and
   167   real_mult_2_assoc_l:        "z1 + (z1 + k) = 2 * z1 + k" and
   728       rules = [
   728       rules = [
   729         \<^rule_thm>\<open>distrib_right\<close>, (*"(z1.0 + z2.0) * w = z1.0 * w + z2.0 * w"*)
   729         \<^rule_thm>\<open>distrib_right\<close>, (*"(z1.0 + z2.0) * w = z1.0 * w + z2.0 * w"*)
   730 	      \<^rule_thm>\<open>distrib_left\<close> (*"w * (z1.0 + z2.0) = w * z1.0 + w * z2.0"*)],
   730 	      \<^rule_thm>\<open>distrib_left\<close> (*"w * (z1.0 + z2.0) = w * z1.0 + w * z2.0"*)],
   731       scr = Rule.Empty_Prog};
   731       scr = Rule.Empty_Prog};
   732 
   732 
       
   733 \<close> ML \<open>
       
   734 \<close> ML \<open>@{term "1 is_num"}\<close>
       
   735 ML \<open>
   733 (* erls for calculate_Rational + etc *)
   736 (* erls for calculate_Rational + etc *)
   734 val powers_erls =
   737 val powers_erls =
   735   Rule_Def.Repeat {id = "powers_erls", preconds = [], rew_ord = ("dummy_ord",Rewrite_Ord.dummy_ord), 
   738   Rule_Def.Repeat {id = "powers_erls", preconds = [], rew_ord = ("dummy_ord",Rewrite_Ord.dummy_ord), 
   736       erls = Rule_Set.empty, srls = Rule_Set.Empty, calc = [], errpatts = [],
   739       erls = Rule_Set.empty, srls = Rule_Set.Empty, calc = [], errpatts = [],
   737       rules = [
   740       rules = [
   749 val discard_minus =
   752 val discard_minus =
   750   Rule_Def.Repeat {id = "discard_minus", preconds = [], rew_ord = ("dummy_ord", Rewrite_Ord.dummy_ord),
   753   Rule_Def.Repeat {id = "discard_minus", preconds = [], rew_ord = ("dummy_ord", Rewrite_Ord.dummy_ord),
   751       erls = powers_erls, srls = Rule_Set.Empty, calc = [], errpatts = [],
   754       erls = powers_erls, srls = Rule_Set.Empty, calc = [], errpatts = [],
   752       rules = [
   755       rules = [
   753         \<^rule_thm>\<open>real_diff_minus\<close> (*"a - b = a + -1 * b"*),
   756         \<^rule_thm>\<open>real_diff_minus\<close> (*"a - b = a + -1 * b"*),
   754         \<^rule_thm>\<open>real_mult_minus1_sym\<close> (*"\<not>(z is_const) ==> - (z::real) = -1 * z"*)],
   757         \<^rule_thm>\<open>real_mult_minus1_sym\<close> (*"\<not>(z is_num) ==> - (z::real) = -1 * z"*)],
   755 	    scr = Rule.Empty_Prog};
   758 	    scr = Rule.Empty_Prog};
   756 
   759 
   757 val expand_poly_ = 
   760 val expand_poly_ = 
   758   Rule_Def.Repeat{id = "expand_poly_", preconds = [], 
   761   Rule_Def.Repeat{id = "expand_poly_", preconds = [], 
   759       rew_ord = ("dummy_ord", Rewrite_Ord.dummy_ord),
   762       rew_ord = ("dummy_ord", Rewrite_Ord.dummy_ord),
   863       rew_ord = ("dummy_ord", Rewrite_Ord.dummy_ord),
   866       rew_ord = ("dummy_ord", Rewrite_Ord.dummy_ord),
   864       erls = Atools_erls, srls = Rule_Set.Empty,
   867       erls = Atools_erls, srls = Rule_Set.Empty,
   865       calc = [("PLUS"  , (\<^const_name>\<open>plus\<close>, eval_binop "#add_"))
   868       calc = [("PLUS"  , (\<^const_name>\<open>plus\<close>, eval_binop "#add_"))
   866 	      ], errpatts = [],
   869 	      ], errpatts = [],
   867       rules = [
   870       rules = [
   868         \<^rule_thm>\<open>real_num_collect\<close>, (*"[| l is_const; m is_const |]==>l * n + m * n = (l + m) * n"*)
   871         \<^rule_thm>\<open>real_num_collect\<close>, (*"[| l is_num; m is_num |]==>l * n + m * n = (l + m) * n"*)
   869 	      \<^rule_thm>\<open>real_num_collect_assoc_r\<close>,
   872 	      \<^rule_thm>\<open>real_num_collect_assoc_r\<close>,
   870 	        (*"[| l is_const; m is_const |] ==> (k + m * n) + l * n = k + (l + m)*n"*)
   873 	        (*"[| l is_num; m is_num |] ==> (k + m * n) + l * n = k + (l + m)*n"*)
   871         \<^rule_thm>\<open>real_one_collect\<close>, (*"m is_const ==> n + m * n = (1 + m) * n"*)
   874         \<^rule_thm>\<open>real_one_collect\<close>, (*"m is_num ==> n + m * n = (1 + m) * n"*)
   872         \<^rule_thm>\<open>real_one_collect_assoc_r\<close>, (*"m is_const ==> (k + n) + m * n = k + (m + 1) * n"*)
   875         \<^rule_thm>\<open>real_one_collect_assoc_r\<close>, (*"m is_num ==> (k + n) + m * n = k + (m + 1) * n"*)
   873 
   876 
   874         \<^rule_eval>\<open>plus\<close> (eval_binop "#add_"),
   877         \<^rule_eval>\<open>plus\<close> (eval_binop "#add_"),
   875 
   878 
   876       	 (*MG: Reihenfolge der folgenden 2 Rule.Thm muss so bleiben, wegen
   879       	 (*MG: Reihenfolge der folgenden 2 Rule.Thm muss so bleiben, wegen
   877 		       (a+a)+a --> a + 2*a --> 3*a and not (a+a)+a --> 2*a + a *)
   880 		       (a+a)+a --> a + 2*a --> 3*a and not (a+a)+a --> 2*a + a *)
   912         \<^rule_thm>\<open>real_plus_minus_binom1_p\<close>, (*"(a + b)*(a - b) = a \<up> 2 + -1*b \<up> 2"*)
   915         \<^rule_thm>\<open>real_plus_minus_binom1_p\<close>, (*"(a + b)*(a - b) = a \<up> 2 + -1*b \<up> 2"*)
   913         \<^rule_thm>\<open>real_plus_minus_binom2_p\<close>, (*"(a - b)*(a + b) = a \<up> 2 + -1*b \<up> 2"*)
   916         \<^rule_thm>\<open>real_plus_minus_binom2_p\<close>, (*"(a - b)*(a + b) = a \<up> 2 + -1*b \<up> 2"*)
   914 
   917 
   915         \<^rule_thm>\<open>minus_minus\<close> (*"- (- ?z) = ?z"*),
   918         \<^rule_thm>\<open>minus_minus\<close> (*"- (- ?z) = ?z"*),
   916         \<^rule_thm>\<open>real_diff_minus\<close> (*"a - b = a + -1 * b"*),
   919         \<^rule_thm>\<open>real_diff_minus\<close> (*"a - b = a + -1 * b"*),
   917         \<^rule_thm>\<open>real_mult_minus1_sym\<close> (*"\<not>(z is_const) ==> - (z::real) = -1 * z"*)
   920         \<^rule_thm>\<open>real_mult_minus1_sym\<close> (*"\<not>(z is_num) ==> - (z::real) = -1 * z"*)
   918 
   921 
   919 	       (*\<^rule_thm>\<open>real_minus_add_distrib\<close>,*) (*"- (?x + ?y) = - ?x + - ?y"*)
   922 	       (*\<^rule_thm>\<open>real_minus_add_distrib\<close>,*) (*"- (?x + ?y) = - ?x + - ?y"*)
   920 	       (*\<^rule_thm>\<open>real_diff_plus\<close>*) (*"a - b = a + -b"*)],
   923 	       (*\<^rule_thm>\<open>real_diff_plus\<close>*) (*"a - b = a + -b"*)],
   921       scr = Rule.Empty_Prog};
   924       scr = Rule.Empty_Prog};
   922 
   925 
   943       calc = [("PLUS"  , (\<^const_name>\<open>plus\<close>, eval_binop "#add_")), 
   946       calc = [("PLUS"  , (\<^const_name>\<open>plus\<close>, eval_binop "#add_")), 
   944 	      ("TIMES" , (\<^const_name>\<open>times\<close>, eval_binop "#mult_")),
   947 	      ("TIMES" , (\<^const_name>\<open>times\<close>, eval_binop "#mult_")),
   945 	      ("POWER", (\<^const_name>\<open>powr\<close>, eval_binop "#power_"))
   948 	      ("POWER", (\<^const_name>\<open>powr\<close>, eval_binop "#power_"))
   946 	      ], errpatts = [],
   949 	      ], errpatts = [],
   947       rules =[
   950       rules =[
   948         \<^rule_thm>\<open>real_num_collect\<close>, (*"[| l is_const; m is_const |]==>l * n + m * n = (l + m) * n"*)
   951         \<^rule_thm>\<open>real_num_collect\<close>, (*"[| l is_num; m is_num |]==>l * n + m * n = (l + m) * n"*)
   949 	      \<^rule_thm>\<open>real_num_collect_assoc\<close>,
   952 	      \<^rule_thm>\<open>real_num_collect_assoc\<close>,
   950           (*"[| l is_const; m is_const |] ==> l * n + (m * n + k) =  (l + m) * n + k"*)
   953           (*"[| l is_num; m is_num |] ==> l * n + (m * n + k) =  (l + m) * n + k"*)
   951 	      \<^rule_thm>\<open>real_one_collect\<close>,	 (*"m is_const ==> n + m * n = (1 + m) * n"*)
   954 	      \<^rule_thm>\<open>real_one_collect\<close>,	 (*"m is_num ==> n + m * n = (1 + m) * n"*)
   952 	      \<^rule_thm>\<open>real_one_collect_assoc\<close>, (*"m is_const ==> k + (n + m * n) = k + (1 + m) * n"*)
   955 	      \<^rule_thm>\<open>real_one_collect_assoc\<close>, (*"m is_num ==> k + (n + m * n) = k + (1 + m) * n"*)
   953 	      \<^rule_eval>\<open>plus\<close> (eval_binop "#add_"), 
   956 	      \<^rule_eval>\<open>plus\<close> (eval_binop "#add_"), 
   954 	      \<^rule_eval>\<open>times\<close> (eval_binop "#mult_"),
   957 	      \<^rule_eval>\<open>times\<close> (eval_binop "#mult_"),
   955 	      \<^rule_eval>\<open>powr\<close> (eval_binop "#power_")],
   958 	      \<^rule_eval>\<open>powr\<close> (eval_binop "#power_")],
   956       scr = Rule.Empty_Prog};
   959       scr = Rule.Empty_Prog};
   957 val reduce_012 = 
   960 val reduce_012 = 
  1192 	     
  1195 	     
  1193 	     \<^rule_thm_sym>\<open>realpow_twoI\<close>, (*"r1 * r1 = r1 \<up> 2"*)
  1196 	     \<^rule_thm_sym>\<open>realpow_twoI\<close>, (*"r1 * r1 = r1 \<up> 2"*)
  1194 	     \<^rule_thm_sym>\<open>real_mult_2\<close>, (*"z1 + z1 = 2 * z1"*)
  1197 	     \<^rule_thm_sym>\<open>real_mult_2\<close>, (*"z1 + z1 = 2 * z1"*)
  1195 	     \<^rule_thm>\<open>real_mult_2_assoc\<close>, (*"z1 + (z1 + k) = 2 * z1 + k"*)
  1198 	     \<^rule_thm>\<open>real_mult_2_assoc\<close>, (*"z1 + (z1 + k) = 2 * z1 + k"*)
  1196 
  1199 
  1197 	     \<^rule_thm>\<open>real_num_collect\<close>,  (*"[| l is_const; m is_const |]==>l * n + m * n = (l + m) * n"*)
  1200 	     \<^rule_thm>\<open>real_num_collect\<close>,  (*"[| l is_num; m is_num |]==>l * n + m * n = (l + m) * n"*)
  1198 	     \<^rule_thm>\<open>real_num_collect_assoc\<close>, (*"[| l is_const; m is_const |] ==> l * n + (m * n + k) =  (l + m) * n + k"*)
  1201 	     \<^rule_thm>\<open>real_num_collect_assoc\<close>, (*"[| l is_num; m is_num |] ==> l * n + (m * n + k) =  (l + m) * n + k"*)
  1199 	     \<^rule_thm>\<open>real_one_collect\<close>, (*"m is_const ==> n + m * n = (1 + m) * n"*)
  1202 	     \<^rule_thm>\<open>real_one_collect\<close>, (*"m is_num ==> n + m * n = (1 + m) * n"*)
  1200 	     \<^rule_thm>\<open>real_one_collect_assoc\<close>, (*"m is_const ==> k + (n + m * n) = k + (1 + m) * n"*)
  1203 	     \<^rule_thm>\<open>real_one_collect_assoc\<close>, (*"m is_num ==> k + (n + m * n) = k + (1 + m) * n"*)
  1201 
  1204 
  1202 	     \<^rule_thm>\<open>realpow_multI\<close>, (*"(r * s) \<up> n = r \<up> n * s \<up> n"*)
  1205 	     \<^rule_thm>\<open>realpow_multI\<close>, (*"(r * s) \<up> n = r \<up> n * s \<up> n"*)
  1203 
  1206 
  1204 	     \<^rule_eval>\<open>plus\<close> (eval_binop "#add_"),
  1207 	     \<^rule_eval>\<open>plus\<close> (eval_binop "#add_"),
  1205 	     \<^rule_eval>\<open>times\<close> (eval_binop "#mult_"),
  1208 	     \<^rule_eval>\<open>times\<close> (eval_binop "#mult_"),
  1297 	     \<^rule_thm>\<open>realpow_plus_1\<close>, (*"r * r \<up> n = r \<up> (n + 1)"*)
  1300 	     \<^rule_thm>\<open>realpow_plus_1\<close>, (*"r * r \<up> n = r \<up> (n + 1)"*)
  1298 	     (*
  1301 	     (*
  1299        \<^rule_thm_sym>\<open>real_mult_2\<close>, (*"z1 + z1 = 2 * z1"*)*)
  1302        \<^rule_thm_sym>\<open>real_mult_2\<close>, (*"z1 + z1 = 2 * z1"*)*)
  1300 	     \<^rule_thm>\<open>real_mult_2_assoc\<close>,	 (*"z1 + (z1 + k) = 2 * z1 + k"*)
  1303 	     \<^rule_thm>\<open>real_mult_2_assoc\<close>,	 (*"z1 + (z1 + k) = 2 * z1 + k"*)
  1301     
  1304     
  1302 	     \<^rule_thm>\<open>real_num_collect\<close>, (*"[| l is_const; m is_const |] ==>l * n + m * n = (l + m) * n"*)
  1305 	     \<^rule_thm>\<open>real_num_collect\<close>, (*"[| l is_num; m is_num |] ==>l * n + m * n = (l + m) * n"*)
  1303 	     \<^rule_thm>\<open>real_num_collect_assoc\<close>, (*"[| l is_const; m is_const |] ==> l * n + (m * n + k) =  (l + m) * n + k"*)
  1306 	     \<^rule_thm>\<open>real_num_collect_assoc\<close>, (*"[| l is_num; m is_num |] ==> l * n + (m * n + k) =  (l + m) * n + k"*)
  1304 	     \<^rule_thm>\<open>real_one_collect\<close>, (*"m is_const ==> n + m * n = (1 + m) * n"*)
  1307 	     \<^rule_thm>\<open>real_one_collect\<close>, (*"m is_num ==> n + m * n = (1 + m) * n"*)
  1305 	     \<^rule_thm>\<open>real_one_collect_assoc\<close>, (*"m is_const ==> k + (n + m * n) = k + (1 + m) * n"*)
  1308 	     \<^rule_thm>\<open>real_one_collect_assoc\<close>, (*"m is_num ==> k + (n + m * n) = k + (1 + m) * n"*)
  1306     
  1309     
  1307 	     \<^rule_eval>\<open>plus\<close> (eval_binop "#add_"), 
  1310 	     \<^rule_eval>\<open>plus\<close> (eval_binop "#add_"), 
  1308 	     \<^rule_eval>\<open>times\<close> (eval_binop "#mult_"),
  1311 	     \<^rule_eval>\<open>times\<close> (eval_binop "#mult_"),
  1309 	     \<^rule_eval>\<open>powr\<close> (eval_binop "#power_")],
  1312 	     \<^rule_eval>\<open>powr\<close> (eval_binop "#power_")],
  1310     scr = Rule.Prog (Program.prep_program @{thm expand_binoms_2.simps})};      
  1313     scr = Rule.Prog (Program.prep_program @{thm expand_binoms_2.simps})};      
  1312 
  1315 
  1313 subsection \<open>add to Know_Store\<close>
  1316 subsection \<open>add to Know_Store\<close>
  1314 subsubsection \<open>rule-sets\<close>
  1317 subsubsection \<open>rule-sets\<close>
  1315 ML \<open>val prep_rls' = Auto_Prog.prep_rls @{theory}\<close>
  1318 ML \<open>val prep_rls' = Auto_Prog.prep_rls @{theory}\<close>
  1316 
  1319 
       
  1320 ML \<open>@{term "1 is_num"}\<close> (*.."Prog_Expr.is_num" IS KNOWN TOODOO*)
  1317 rule_set_knowledge
  1321 rule_set_knowledge
  1318   norm_Poly = \<open>prep_rls' norm_Poly\<close> and
  1322   norm_Poly = \<open>prep_rls' norm_Poly\<close> 
  1319   Poly_erls = \<open>prep_rls' Poly_erls\<close> (*FIXXXME:del with rls.rls'*) and
  1323 (*/---- TOODOO from 2b6e73df4e5d assoc_calc: 'Prog_Expr.is_num' not found in theory Poly ------\* )
       
  1324 and
       
  1325   Poly_erls = \<open>prep_rls' Poly_erls\<close> (*FIXXXME:del with rls.rls'*) 
       
  1326 ( *\---- TOODOO from 2b6e73df4e5d assoc_calc: 'Prog_Expr.is_num' not found in theory Poly ------/*)
       
  1327 and
  1320   expand = \<open>prep_rls' expand\<close> and
  1328   expand = \<open>prep_rls' expand\<close> and
  1321   expand_poly = \<open>prep_rls' expand_poly\<close> and
  1329   expand_poly = \<open>prep_rls' expand_poly\<close> and
  1322   simplify_power = \<open>prep_rls' simplify_power\<close> and
  1330   simplify_power = \<open>prep_rls' simplify_power\<close> and
  1323 
  1331 
  1324   order_add_mult = \<open>prep_rls' order_add_mult\<close> and
  1332   order_add_mult = \<open>prep_rls' order_add_mult\<close> and
  1368     crls = Rule_Set.empty, errpats = [], nrls = norm_Poly}\<close>
  1376     crls = Rule_Set.empty, errpats = [], nrls = norm_Poly}\<close>
  1369   Program: simplify.simps
  1377   Program: simplify.simps
  1370   Given: "Term t_t"
  1378   Given: "Term t_t"
  1371   Where: "t_t is_polyexp"
  1379   Where: "t_t is_polyexp"
  1372   Find: "normalform n_n"
  1380   Find: "normalform n_n"
  1373 
       
  1374 ML \<open>
  1381 ML \<open>
  1375 \<close> ML \<open>
  1382 \<close> ML \<open>
  1376 \<close> 
  1383 \<close> 
  1377 end
  1384 end