test/Tools/isac/Knowledge/polyeq-1.sml
author wneuper <walther.neuper@jku.at>
Sun, 22 Aug 2021 09:43:43 +0200
changeset 60389 81b98f7e9ea5
parent 60346 aa8a17a75749
child 60393 070aa3b448d6
permissions -rw-r--r--
improvement in Rational.thy makes several testfiles run, breaks one.
     1 (* Title:  Knowledge/polyeq-1.sml
     2            testexamples for PolyEq, poynomial equations and equational systems
     3    Author: Richard Lang 2003  
     4    (c) due to copyright terms
     5 WN030609: some expls dont work due to unfinished handling of 'expanded terms';
     6           others marked with TODO have to be checked, too.
     7 *)
     8 
     9 "-----------------------------------------------------------------";
    10 "table of contents -----------------------------------------------";
    11 "-----------------------------------------------------------------";
    12 "------ polyeq- 1.sml ---------------------------------------------";
    13 "----------- tests on predicates in problems ---------------------";
    14 "----------- test matching problems ------------------------------";
    15 "----------- prep. for introduction of Matthias Goldgruber 2003 trials on rewrite orders -----";
    16 "----------- open local of fun ord_make_polynomial_in ------------------------------------------";
    17 "----------- Matthias Goldgruber 2003 trials on rewrite orders -------------------------------";
    18 "----------- lin.eq degree_0 -------------------------------------";
    19 "----------- test thm's d2_pq_formulsxx[_neg]---------------------";
    20 "----------- equality (2 +(- 1)*x + x \<up> 2 = (0::real)) ----------------------------------------";
    21 "----------- equality (- 2 +(- 1)*x + 1*x \<up> 2 = 0) ---------------------------------------------";
    22 "----------- equality (- 2 + x + x \<up> 2 = 0) ---------------------------------------------------";
    23 "----------- equality (2 + x + x \<up> 2 = 0) ----------------------------------------------------";
    24 "----------- equality (- 2 + x + 1*x \<up> 2 = 0)) ------------------------------------------------";
    25 "----------- equality (1*x +   x \<up> 2 = 0) ----------------------------------------------------";
    26 "----------- equality (1*x + 1*x \<up> 2 = 0) ----------------------------------------------------";
    27 "----------- equality (x +   x \<up> 2 = 0) ------------------------------------------------------";
    28 "----------- equality (x + 1*x \<up> 2 = 0) ------------------------------------------------------";
    29 "----------- equality (-4 + x \<up> 2 = 0) -------------------------------------------------------";
    30 "----------- equality (4 + 1*x \<up> 2 = 0) -------------------------------------------------------";
    31 "----------- equality (1 +(- 1)*x + 2*x \<up> 2 = 0) ----------------------------------------------";
    32 "----------- equality (- 1 + x + 2*x \<up> 2 = 0) -------------------------------------------------";
    33 "----------- equality (1 + x + 2*x \<up> 2 = 0) --------------------------------------------------";
    34 "----------- (-8 - 2*x + x \<up> 2 = 0),  (*Schalk 2, S.67 Nr.31.b----";
    35 "----------- (-8 - 2*x + x \<up> 2 = 0),  by rewriting ---------------";
    36 "----------- (- 16 + 4*x + 2*x \<up> 2 = 0), --------------------------";
    37 "-----------------------------------------------------------------";
    38 "------ polyeq- 2.sml ---------------------------------------------";
    39 "----------- (a*b - (a+b)*x + x \<up> 2 = 0), (*Schalk 2,S.68Nr.44.a*)";
    40 "----------- (-64 + x \<up> 2 = 0), (*Schalk 2, S.66 Nr.1.a~--------*)";
    41 "----------- (- 147 + 3*x \<up> 2 = 0), (*Schalk 2, S.66 Nr.1.b------*)";
    42 "----------- (3*x - 1 - (5*x - (2 - 4*x)) = - 11),(*Schalk Is86Bsp5";
    43 "----------- ((x+1)*(x+2) - (3*x - 2) \<up> 2=.. Schalk II s.68 Bsp 37";
    44 "----------- rls make_polynomial_in ------------------------------";
    45 "----------- interSteps ([1],Res); on Schalk Is86Bsp5-------------";
    46 "----------- rls d2_polyeq_bdv_only_simplify ---------------------";
    47 "-----------------------------------------------------------------";
    48 "-----------------------------------------------------------------";
    49 
    50 "----------- tests on predicates in problems ---------------------";
    51 "----------- tests on predicates in problems ---------------------";
    52 "----------- tests on predicates in problems ---------------------";
    53 Rewrite.trace_on:=false;  (*true false*)
    54 
    55  val t1 = (Thm.term_of o the o (TermC.parse thy)) "lhs (-8 - 2*x + x \<up> 2 = 0)";
    56  val SOME (t,_) = rewrite_set_ @{theory PolyEq} false PolyEq_prls t1;
    57  if ((UnparseC.term t) = "- 8 - 2 * x + x \<up> 2") then ()
    58  else  error "polyeq.sml: diff.behav. in lhs";
    59 
    60  val t2 = (Thm.term_of o the o (TermC.parse thy)) "(-8 - 2*x + x \<up> 2) is_expanded_in x";
    61  val SOME (t,_) = rewrite_set_ @{theory PolyEq} false PolyEq_prls t2;
    62  if (UnparseC.term t) = "True" then ()
    63  else  error "polyeq.sml: diff.behav. 1 in is_expended_in";
    64 
    65  val t0 = (Thm.term_of o the o (TermC.parse thy)) "(sqrt(x)) is_poly_in x";
    66  val SOME (t,_) = rewrite_set_ @{theory PolyEq} false PolyEq_prls t0;
    67  if (UnparseC.term t) = "False" then ()
    68  else  error "polyeq.sml: diff.behav. 2 in is_poly_in";
    69 
    70  val t3 = (Thm.term_of o the o (TermC.parse thy)) "(-8 + (- 1)*2*x + x \<up> 2) is_poly_in x";
    71  val SOME (t,_) = rewrite_set_ @{theory PolyEq} false PolyEq_prls t3;
    72  if (UnparseC.term t) = "True" then ()
    73  else  error "polyeq.sml: diff.behav. 3 in is_poly_in";
    74 
    75  val t4 = (Thm.term_of o the o (TermC.parse thy)) "(lhs (-8 + (- 1)*2*x + x \<up> 2 = 0)) is_expanded_in x";
    76  val SOME (t,_) = rewrite_set_ @{theory PolyEq} false PolyEq_prls t4;
    77  if (UnparseC.term t) = "True" then ()
    78  else  error "polyeq.sml: diff.behav. 4 in is_expended_in";
    79 
    80  val t6 = (Thm.term_of o the o (TermC.parse thy)) "(lhs (-8 - 2*x + x \<up> 2 = 0)) is_expanded_in x";
    81  val SOME (t,_) = rewrite_set_ @{theory PolyEq} false PolyEq_prls t6;
    82  if (UnparseC.term t) = "True" then ()
    83  else  error "polyeq.sml: diff.behav. 5 in is_expended_in";
    84  
    85  val t3 = (Thm.term_of o the o (TermC.parse thy))"((-8 - 2*x + x \<up> 2) has_degree_in x) = 2";
    86  val SOME (t,_) = rewrite_set_ @{theory PolyEq} false PolyEq_prls t3;
    87  if (UnparseC.term t) = "True" then ()
    88  else  error "polyeq.sml: diff.behav. in has_degree_in_in";
    89 
    90  val t3 = (Thm.term_of o the o (TermC.parse thy)) "((sqrt(x)) has_degree_in x) = 2";
    91  val SOME (t,_) = rewrite_set_ @{theory PolyEq} false PolyEq_prls t3;
    92  if (UnparseC.term t) = "False" then ()
    93  else  error "polyeq.sml: diff.behav. 6 in has_degree_in_in";
    94 
    95  val t4 = (Thm.term_of o the o (TermC.parse thy)) 
    96 	      "((-8 - 2*x + x \<up> 2) has_degree_in x) = 1";
    97  val SOME (t,_) = rewrite_set_ @{theory PolyEq} false PolyEq_prls t4;
    98  if (UnparseC.term t) = "False" then ()
    99  else  error "polyeq.sml: diff.behav. 7 in has_degree_in_in";
   100 
   101 val t5 = (Thm.term_of o the o (TermC.parse thy)) 
   102 	      "((-8 - 2*x + x \<up> 2) has_degree_in x) = 2";
   103  val SOME (t,_) = rewrite_set_ @{theory PolyEq} false PolyEq_prls t5;
   104  if (UnparseC.term t) = "True" then ()
   105  else  error "polyeq.sml: diff.behav. 8 in has_degree_in_in";
   106 
   107 "----------- test matching problems --------------------------0---";
   108 "----------- test matching problems --------------------------0---";
   109 "----------- test matching problems --------------------------0---";
   110 val fmz = ["equality (-8 - 2*x + x \<up> 2 = 0)", "solveFor x", "solutions L"];
   111 if M_Match.match_pbl fmz (Problem.from_store ["expanded", "univariate", "equation"]) =
   112   M_Match.Matches' {Find = [Correct "solutions L"], 
   113             With = [], 
   114             Given = [Correct "equality (- 8 - 2 * x + x \<up> 2 = 0)", Correct "solveFor x"], 
   115             Where = [Correct "matches (?a = 0) (- 8 - 2 * x + x \<up> 2 = 0)", 
   116                      Correct "lhs (- 8 - 2 * x + x \<up> 2 = 0) is_expanded_in x"], 
   117             Relate = []}
   118 then () else error "M_Match.match_pbl [expanded,univariate,equation]";
   119 
   120 if M_Match.match_pbl fmz (Problem.from_store ["degree_2", "expanded", "univariate", "equation"]) =
   121   M_Match.Matches' {Find = [Correct "solutions L"], 
   122             With = [], 
   123             Given = [Correct "equality (- 8 - 2 * x + x \<up> 2 = 0)", Correct "solveFor x"], 
   124             Where = [Correct "lhs (- 8 - 2 * x + x \<up> 2 = 0) has_degree_in x = 2"], 
   125             Relate = []}              (*before WN110906 was: has_degree_in x =!= 2"]*)
   126 then () else error "M_Match.match_pbl [degree_2,expanded,univariate,equation]";
   127 
   128 
   129 "----------- prep. for introduction of Matthias Goldgruber 2003 trials on rewrite orders -----";
   130 "----------- prep. for introduction of Matthias Goldgruber 2003 trials on rewrite orders -----";
   131 "----------- prep. for introduction of Matthias Goldgruber 2003 trials on rewrite orders -----";
   132 (*##################################################################################
   133 ----------- 28.2.03: war nicht upgedatet und ausgeklammert in ROOT.ML-->Test_Isac.thy
   134 
   135   (*Aufgabe zum Einstieg in die Arbeit...*)
   136   val t = (Thm.term_of o the o (TermC.parse thy)) "a*b - (a+b)*x + x \<up> 2 = 0";
   137   (*ein 'ruleset' aus Poly.ML wird angewandt...*)
   138   val SOME (t,_) = rewrite_set_ thy Poly_erls false make_polynomial t;
   139   UnparseC.term t;
   140   "a * b + (- 1 * (a * x) + (- 1 * (b * x) + x \<up> 2)) = 0";
   141   val SOME (t,_) = 
   142       rewrite_set_inst_ thy Poly_erls false [("bdv", "a")] make_polynomial_in t;
   143   UnparseC.term t;
   144   "x \<up> 2 + (- 1 * (b * x) + (- 1 * (x * a) + b * a)) = 0";
   145 (* bei Verwendung von "size_of-term" nach MG :*)
   146 (*"x \<up> 2 + (- 1 * (b * x) + (b * a + - 1 * (x * a))) = 0"  !!! *)
   147 
   148   (*wir holen 'a' wieder aus der Klammerung heraus...*)
   149   val SOME (t,_) = rewrite_set_ thy Poly_erls false discard_parentheses t;
   150   UnparseC.term t;
   151    "x \<up> 2 + - 1 * b * x + - 1 * x * a + b * a = 0";
   152 (* "x \<up> 2 + - 1 * b * x + b * a + - 1 * x * a = 0" !!! *)
   153 
   154   val SOME (t,_) =
   155       rewrite_set_inst_ thy Poly_erls false [("bdv", "a")] make_polynomial_in t;
   156   UnparseC.term t;
   157   "x \<up> 2 + (- 1 * (b * x) + a * (b + - 1 * x)) = 0"; 
   158   (*da sind wir fast am Ziel: make_polynomial_in 'a' sollte ergeben
   159   "x \<up> 2 + (- 1 * (b * x)) + (b + - 1 * x) * a = 0"*)
   160 
   161   (*das rewriting l"asst sich beobachten mit
   162 Rewrite.trace_on := false; (*true false*)
   163   *)
   164 
   165 "------ 15.11.02 --------------------------";
   166   val t = (Thm.term_of o the o (TermC.parse thy)) "1 + a * x + b * x";
   167   val bdv = (Thm.term_of o the o (TermC.parse thy)) "bdv";
   168   val a = (Thm.term_of o the o (TermC.parse thy)) "a";
   169  
   170 Rewrite.trace_on := false; (*true false*)
   171  (* Anwenden einer Regelmenge aus Termorder.ML: *)
   172  val SOME (t,_) =
   173      rewrite_set_inst_ thy false [(bdv,a)] make_polynomial_in t;
   174  UnparseC.term t;
   175  val SOME (t,_) =
   176      rewrite_set_ thy false discard_parentheses t;
   177  UnparseC.term t;
   178 "1 + b * x + x * a";
   179 
   180  val t = (Thm.term_of o the o (TermC.parse thy)) "1 + a * (x + b * x) + a \<up> 2";
   181  val SOME (t,_) =
   182      rewrite_set_inst_ thy false [(bdv,a)] make_polynomial_in t;
   183  UnparseC.term t;
   184  val SOME (t,_) =
   185      rewrite_set_ thy false discard_parentheses t;
   186  UnparseC.term t;
   187 "1 + (x + b * x) * a + a \<up> 2";
   188 
   189  val t = (Thm.term_of o the o (TermC.parse thy)) "1 + a  \<up> 2 * x + b * a + 7*a \<up> 2";
   190  val SOME (t,_) =
   191      rewrite_set_inst_ thy false [(bdv,a)] make_polynomial_in t;
   192  UnparseC.term t;
   193  val SOME (t,_) =
   194      rewrite_set_ thy false discard_parentheses t;
   195  UnparseC.term t;
   196 "1 + b * a + (7 + x) * a \<up> 2";
   197 
   198 (* MG2003
   199  Prog_Expr.thy       grundlegende Algebra
   200  Poly.thy         Polynome
   201  Rational.thy     Br"uche
   202  Root.thy         Wurzeln
   203  RootRat.thy      Wurzen + Br"uche
   204  Termorder.thy    BITTE NUR HIERHER SCHREIBEN (...WN03)
   205 
   206  get_thm Termorder.thy "bdv_n_collect";
   207  get_thm (theory "Isac_Knowledge") "bdv_n_collect";
   208 *)
   209  val t = (Thm.term_of o the o (TermC.parse thy)) "a  \<up> 2 * x + 7 * a \<up> 2";
   210  val SOME (t,_) =
   211      rewrite_set_inst_ thy false [(bdv,a)] make_polynomial_in t;
   212  UnparseC.term t;
   213  val SOME (t,_) =
   214      rewrite_set_ thy false discard_parentheses t;
   215  UnparseC.term t;
   216 "(7 + x) * a \<up> 2";
   217 
   218  val t = (Thm.term_of o the o (TermC.parse Termorder.thy)) "Pi";
   219 
   220  val t = (Thm.term_of o the o (parseold thy)) "7";
   221 ##################################################################################*)
   222 
   223 
   224 "----------- open local of fun ord_make_polynomial_in ------------------------------------------";
   225 "----------- open local of fun ord_make_polynomial_in ------------------------------------------";
   226 "----------- open local of fun ord_make_polynomial_in ------------------------------------------";
   227 (* termorder hacked by MG, adapted later by WN *)
   228 (** )local ( *. for make_polynomial_in .*)
   229 
   230 open Term;  (* for type order = EQUAL | LESS | GREATER *)
   231 
   232 fun pr_ord EQUAL = "EQUAL"
   233   | pr_ord LESS  = "LESS"
   234   | pr_ord GREATER = "GREATER";
   235 
   236 fun dest_hd' _ (Const (a, T)) = (((a, 0), T), 0)
   237   | dest_hd' x (t as Free (a, T)) =
   238     if x = t then ((("|||||||||||||", 0), T), 0)                        (*WN*)
   239     else (((a, 0), T), 1)
   240   | dest_hd' _ (Var v) = (v, 2)
   241   | dest_hd' _ (Bound i) = ((("", i), dummyT), 3)
   242   | dest_hd' _ (Abs (_, T, _)) = ((("", 0), T), 4)
   243   | dest_hd' _ _ = raise ERROR "dest_hd': uncovered case in fun.def.";
   244 
   245 fun size_of_term' i pr x (t as Const (\<^const_name>\<open>powr\<close>, _) $ 
   246       Free (var, _) $ Free (pot, _)) =
   247     (if pr then tracing (idt "#" i ^ "size_of_term' powr: " ^ UnparseC.term t) else ();
   248     case x of                                                          (*WN*)
   249 	    (Free (xstr, _)) => 
   250 		    if xstr = var 
   251         then (if pr then tracing (idt "#" i ^ "xstr = var --> " ^ string_of_int (1000 * (the (TermC.int_opt_of_string pot)))) else ();
   252           1000 * (the (TermC.int_opt_of_string pot)))
   253         else (if pr then tracing (idt "#" i ^ "x <> Free  --> " ^ "3") else (); 3)
   254 	  | _ => raise ERROR ("size_of_term' called with subst = " ^ UnparseC.term x))
   255   | size_of_term' i pr x (t as Abs (_, _, body)) =
   256     (if pr then tracing (idt "#" i ^ "size_of_term' Abs: " ^ UnparseC.term t) else ();
   257     1 + size_of_term' (i + 1) pr x body)
   258   | size_of_term' i pr x (f $ t) =
   259     let
   260       val _ = if pr then tracing (idt "#" i ^ "size_of_term' $$$: " ^ UnparseC.term f ^ " $$$ " ^ UnparseC.term t) else ();
   261       val s1 = size_of_term' (i + 1) pr x f
   262       val s2 = size_of_term' (i + 1) pr x t
   263       val _ = if pr then tracing (idt "#" i ^ "size_of_term' $$$-->: " ^ string_of_int s1 ^ " + " ^ string_of_int s2 ^ " = " ^ string_of_int(s1 + s2)) else ();
   264     in (s1 + s2) end
   265   | size_of_term' i pr x t =
   266     (if pr then tracing (idt "#" i ^ "size_of_term' bot: " ^ UnparseC.term t) else ();
   267     case t of
   268       Free (subst, _) => 
   269        (case x of
   270    	     Free (xstr, _) =>
   271             if xstr = subst
   272             then (if pr then tracing (idt "#" i ^ "xstr = var --> " ^ "1000") else (); 1000)
   273             else (if pr then tracing (idt "#" i ^ "x <> Free  --> " ^ "1") else (); 1)
   274    	   | _ => raise ERROR ("size_of_term' called with subst = " ^ UnparseC.term x))
   275      | _ => (if pr then tracing (idt "#" i ^ "bot        --> " ^ "1") else (); 1));
   276 
   277 fun term_ord' i pr x thy (Abs (_, T, t), Abs(_, U, u)) =       (* ~ term.ML *)
   278     let
   279       val _ = if pr then tracing (idt "#" i ^ "term_ord' Abs") else ();
   280       val ord =
   281         case term_ord' (i + 1) pr x thy (t, u) of EQUAL => Term_Ord.typ_ord (T, U) | ord => ord
   282       val _  = if pr then tracing (idt "#" i ^ "term_ord' Abs --> " ^ pr_ord ord) else ()
   283     in ord end
   284   | term_ord' i pr x _ (t, u) =
   285     let
   286       val _ = if pr then tracing (idt "#" i ^ "term_ord' bot (" ^ UnparseC.term t ^ ", " ^ UnparseC.term u ^ ")") else ();
   287       val ord =
   288     	  case int_ord (size_of_term' (i + 1) pr x t, size_of_term' (i + 1) pr x u) of
   289     	    EQUAL =>
   290     	      let val (f, ts) = strip_comb t and (g, us) = strip_comb u 
   291             in
   292     	        (case hd_ord (i + 1) pr x (f, g) of 
   293     	           EQUAL => (terms_ord x (i + 1) pr) (ts, us) 
   294     	         | ord => ord)
   295     	      end
   296     	  | ord => ord
   297       val _  = if pr then tracing (idt "#" i ^ "term_ord' bot --> " ^ pr_ord ord) else ()
   298     in ord end
   299 and hd_ord i pr x (f, g) =                                        (* ~ term.ML *)
   300     let
   301       val _ = if pr then tracing (idt "#" i ^ "hd_ord (" ^ UnparseC.term f ^ ", " ^ UnparseC.term g ^ ")") else ();
   302       val ord = prod_ord
   303         (prod_ord Term_Ord.indexname_ord Term_Ord.typ_ord) int_ord
   304           (dest_hd' x f, dest_hd' x g)
   305       val _ = if pr then tracing (idt "#" i ^ "hd_ord --> " ^ pr_ord ord) else ();
   306     in ord end
   307 and terms_ord x i pr (ts, us) = 
   308     let
   309       val _ = if pr then tracing (idt "#" i ^ "terms_ord (" ^ UnparseC.terms ts ^ ", " ^ UnparseC.terms us ^ ")") else ();
   310       val ord = list_ord (term_ord' (i + 1) pr x (ThyC.get_theory "Isac_Knowledge"))(ts, us);
   311       val _ = if pr then tracing (idt "#" i ^ "terms_ord --> " ^ pr_ord ord) else ();
   312     in ord end
   313 
   314 (** )in( *local*)
   315 
   316 fun ord_make_polynomial_in (pr:bool) thy subst (ts, us) =
   317   ((** )tracing ("*** subs variable is: " ^ Env.subst2str subst); ( **)
   318 	case subst of
   319 	  (_, x) :: _ =>
   320       term_ord' 1 pr x thy (TermC.numerals_to_Free ts, TermC.numerals_to_Free us) = LESS
   321 	| _ => raise ERROR ("ord_make_polynomial_in called with subst = " ^ Env.subst2str subst))
   322 
   323 (** )end;( *local*)
   324 
   325 val subs = [(TermC.str2term "bdv::real", TermC.str2term "x::real")];
   326 if ord_make_polynomial_in true @{theory} subs (t1, t2) then ()  else error "still GREATER?";
   327 
   328 val x = TermC.str2term "x ::real";
   329 
   330 val t1 = TermC.numerals_to_Free (TermC.str2term "L * q_0 * x \<up> 2 / 4 ::real");
   331 if 2006 = size_of_term' 1 true x t1 
   332 then () else error "size_of_term' (L * q_0 * x \<up> 2) CHANGED)";
   333 
   334 val t2 = TermC.numerals_to_Free (TermC.str2term "- 1 * (q_0 * x \<up> 3) :: real");
   335 if 3004 = size_of_term' 1 true x t2
   336 then () else error "size_of_term' (- 1 * (q_0 * x \<up> 3)) CHANGED";
   337 
   338 
   339 "----------- Matthias Goldgruber 2003 trials on rewrite orders -------------------------------";
   340 "----------- Matthias Goldgruber 2003 trials on rewrite orders -------------------------------";
   341 "----------- Matthias Goldgruber 2003 trials on rewrite orders -------------------------------";
   342   val substa = [(TermC.empty, (Thm.term_of o the o (TermC.parse thy)) "a")];
   343   val substb = [(TermC.empty, (Thm.term_of o the o (TermC.parse thy)) "b")];
   344   val substx = [(TermC.empty, (Thm.term_of o the o (TermC.parse thy)) "x")];
   345 
   346   val x1 = (Thm.term_of o the o (TermC.parse thy)) "a + b + x";
   347   val x2 = (Thm.term_of o the o (TermC.parse thy)) "a + x + b";
   348   val x3 = (Thm.term_of o the o (TermC.parse thy)) "a + x + b";
   349   val x4 = (Thm.term_of o the o (TermC.parse thy)) "x + a + b";
   350 
   351 if ord_make_polynomial_in true thy substx (x1,x2) = true(*LESS *) then ()
   352 else error "termorder.sml diff.behav ord_make_polynomial_in #1";
   353  
   354 if ord_make_polynomial_in true thy substa (x1,x2) = true(*LESS *) then ()
   355 else error "termorder.sml diff.behav ord_make_polynomial_in #2";
   356 
   357 if ord_make_polynomial_in true thy substb (x1,x2) = false(*GREATER*) then ()
   358 else error "termorder.sml diff.behav ord_make_polynomial_in #3";
   359 
   360   val aa = (Thm.term_of o the o (TermC.parse thy)) "- 1 * a * x";
   361   val bb = (Thm.term_of o the o (TermC.parse thy)) "x \<up> 3";
   362   ord_make_polynomial_in true thy substx (aa, bb);
   363   true; (* => LESS *) 
   364   
   365   val aa = (Thm.term_of o the o (TermC.parse thy)) "- 1 * a * x";
   366   val bb = (Thm.term_of o the o (TermC.parse thy)) "x \<up> 3";
   367   ord_make_polynomial_in true thy substa (aa, bb);
   368   false; (* => GREATER *)
   369 
   370 (* und nach dem Re-engineering der Termorders in den 'rulesets' 
   371    kannst Du die 'gr"osste' Variable frei w"ahlen: *)
   372   val bdv= TermC.str2term "bdv ::real";
   373   val x  = TermC.str2term "x ::real";
   374   val a  = TermC.str2term "a ::real";
   375   val b  = TermC.str2term "b ::real";
   376 val SOME (t',_) = rewrite_set_inst_ thy false [(bdv,a)] make_polynomial_in x2;
   377 if UnparseC.term t' = "b + x + a" then ()
   378 else error "termorder.sml diff.behav ord_make_polynomial_in #11";
   379 
   380 val NONE = rewrite_set_inst_ thy false [(bdv,b)] make_polynomial_in x2;
   381 
   382 val SOME (t',_) = rewrite_set_inst_ thy false [(bdv,x)] make_polynomial_in x2;
   383 if UnparseC.term t' = "a + b + x" then ()
   384 else error "termorder.sml diff.behav ord_make_polynomial_in #13";
   385 
   386   val ppp' = "-6 + -5*x + x \<up> 3 + - 1*x \<up> 2 + - 1*x \<up> 3 + - 14*x \<up> 2";
   387   val ppp  = (Thm.term_of o the o (TermC.parse thy)) ppp';
   388 val SOME (t', _) = rewrite_set_inst_ thy false [(bdv,x)] make_polynomial_in ppp;
   389 if UnparseC.term t' = "- 6 + - 5 * x + - 15 * x \<up> 2" then ()
   390 else error "termorder.sml diff.behav ord_make_polynomial_in #15";
   391 
   392   val ttt' = "(3*x + 5)/18 ::real";
   393   val ttt = (Thm.term_of o the o (TermC.parse thy)) ttt';
   394 val SOME (uuu,_) = rewrite_set_inst_ thy false [(bdv,x)] make_polynomial_in ttt;
   395 if UnparseC.term uuu = "(5 + 3 * x) / 18" then ()
   396 else error "termorder.sml diff.behav ord_make_polynomial_in #16a";
   397 
   398 val SOME (uuu,_) = rewrite_set_ thy false make_polynomial ttt;
   399 if UnparseC.term uuu = "(5 + 3 * x) / 18" then ()
   400 else error "termorder.sml diff.behav ord_make_polynomial_in #16b";
   401 
   402 "----------- lin.eq degree_0 -------------------------------------";
   403 "----------- lin.eq degree_0 -------------------------------------";
   404 "----------- lin.eq degree_0 -------------------------------------";
   405 "----- d0_false ------";
   406 val fmz = ["equality (1 = (0::real))", "solveFor x", "solutions L"];
   407 val (dI',pI',mI') = ("PolyEq",["degree_0", "polynomial", "univariate", "equation"],
   408                      ["PolyEq", "solve_d0_polyeq_equation"]);
   409 (*=== inhibit exn WN110914: declare_constraints doesnt work with ThmC.numerals_to_Free ========
   410 TODO: change to "equality (x + - 1*x = (0::real))"
   411       and search for an appropriate problem and method.
   412 
   413 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
   414 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   415 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   416 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   417 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   418 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   419 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   420 case f of Form' (Test_Out.FormKF (~1,EdUndef,0,Nundef,"[]")) => ()
   421 	 | _ => error "polyeq.sml: diff.behav. in 1 = 0 -> []";
   422 
   423 "----- d0_true ------";
   424 val fmz = ["equality (0 = (0::real))", "solveFor x", "solutions L"];
   425 val (dI',pI',mI') = ("PolyEq",["degree_0", "polynomial", "univariate", "equation"],
   426                      ["PolyEq", "solve_d0_polyeq_equation"]);
   427 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
   428 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   429 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   430 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   431 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   432 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   433 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   434 case f of Form' (Test_Out.FormKF (~1,EdUndef,0,Nundef,"UniversalList")) => ()
   435 	 | _ => error "polyeq.sml: diff.behav. in 0 = 0 -> UniversalList";
   436 ============ inhibit exn WN110914 ============================================*)
   437 
   438 "----------- test thm's d2_pq_formulsxx[_neg]---------------------";
   439 "----------- test thm's d2_pq_formulsxx[_neg]---------------------";
   440 "----------- test thm's d2_pq_formulsxx[_neg]---------------------";
   441 "----- d2_pqformula1 ------!!!!";
   442 val fmz = ["equality (- 1/8 + (- 1/4)*z + z \<up> 2 = (0::real))", "solveFor z", "solutions L"];
   443 val (dI',pI',mI') =
   444   ("Isac_Knowledge", ["pqFormula", "degree_2", "polynomial", "univariate", "equation"], ["no_met"]);
   445 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
   446 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   447 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   448 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   449 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   450 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   451 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   452 val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*Apply_Method ["PolyEq", "solve_d2_polyeq_pq_equation"]*)
   453 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   454 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   455 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   456 val (p,_,f,nxt,_,pt) = me nxt p [] pt;         
   457 
   458 (*[z = 1 / 8 + sqrt (9 / 16) / 2, z = 1 / 8 + - 1 * sqrt (9 / 16) / 2] TODO sqrt*)
   459 val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt =..,Check_elementwise "Assumptions")*)
   460 val (p,_,f,nxt,_,pt) = me nxt p [] pt;         
   461 val (p,_,f,nxt,_,pt) = me nxt p [] pt;         
   462 
   463 if p = ([], Res) andalso
   464   f2str f = "[z = 1 / 8 + sqrt (9 / 16) / 2, z = 1 / 8 + - 1 * sqrt (9 / 16) / 2]" then
   465     case nxt of End_Proof' => () | _ => error "(- 1/8 + (- 1/4)*z + z \<up> 2 = (0::real)) CHANGED 1"
   466 else error "(- 1/8 + (- 1/4)*z + z \<up> 2 = (0::real)) CHANGED 2";
   467 
   468 "----------- equality (2 +(- 1)*x + x \<up> 2 = (0::real)) ----------------------------------------";
   469 "----------- equality (2 +(- 1)*x + x \<up> 2 = (0::real)) ----------------------------------------";
   470 "----------- equality (2 +(- 1)*x + x \<up> 2 = (0::real)) ----------------------------------------";
   471 "----- d2_pqformula1_neg ------";
   472 val fmz = ["equality (2 +(- 1)*x + x \<up> 2 = (0::real))", "solveFor x", "solutions L"];
   473 val (dI',pI',mI') = ("PolyEq",["pqFormula", "degree_2", "polynomial", "univariate", "equation"], ["PolyEq", "solve_d2_polyeq_pq_equation"]);
   474 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
   475 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   476 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   477 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   478 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   479 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   480 (*### or2list False
   481   ([1],Res)  False   Or_to_List)*)
   482 val (p,_,f,nxt,_,pt) = me nxt p [] pt; 
   483 (*### or2list False                           
   484   ([2],Res)  []      Check_elementwise "Assumptions"*)
   485 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   486 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   487 val asm = Ctree.get_assumptions pt p;
   488 if f2str f = "[]" andalso 
   489   UnparseC.terms asm = "[\"lhs (2 + - 1 * x + x \<up> 2 = 0) is_poly_in x\", " ^
   490     "\"lhs (2 + - 1 * x + x \<up> 2 = 0) has_degree_in x = 2\"]" then ()
   491 else error "polyeq.sml: diff.behav. in 2 +(- 1)*x + x \<up> 2 = 0";
   492 
   493 "----------- equality (- 2 +(- 1)*x + 1*x \<up> 2 = 0) ---------------------------------------------";
   494 "----------- equality (- 2 +(- 1)*x + 1*x \<up> 2 = 0) ---------------------------------------------";
   495 "----------- equality (- 2 +(- 1)*x + 1*x \<up> 2 = 0) ---------------------------------------------";
   496 "----- d2_pqformula2 ------";
   497 val fmz = ["equality (- 2 +(- 1)*x + 1*x \<up> 2 = 0)", "solveFor x", "solutions L"];
   498 val (dI',pI',mI') = ("PolyEq",["pqFormula", "degree_2", "polynomial", "univariate", "equation"],
   499                      ["PolyEq", "solve_d2_polyeq_pq_equation"]);
   500 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
   501 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   502 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   503 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   504 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   505 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   506 
   507 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   508 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   509 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   510 case f of Test_Out.FormKF "[x = 2, x = - 1]" => ()
   511 	 | _ => error "polyeq.sml: diff.behav. in - 2 + (- 1)*x + x^2 = 0 -> [x = 2, x = - 1]";
   512 
   513 
   514 "----------- equality (- 2 + x + x \<up> 2 = 0) ---------------------------------------------------";
   515 "----------- equality (- 2 + x + x \<up> 2 = 0) ---------------------------------------------------";
   516 "----------- equality (- 2 + x + x \<up> 2 = 0) ---------------------------------------------------";
   517 "----- d2_pqformula3 ------";
   518 (*EP-9*)
   519 val fmz = ["equality (- 2 + x + x \<up> 2 = 0)", "solveFor x", "solutions L"];
   520 val (dI',pI',mI') = ("PolyEq",["pqFormula", "degree_2", "polynomial", "univariate", "equation"],
   521                      ["PolyEq", "solve_d2_polyeq_pq_equation"]);
   522 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
   523 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   524 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   525 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   526 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   527 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   528 
   529 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   530 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   531 val (p,_,f,nxt,_,pt) = me nxt p [] pt; 
   532 case f of Test_Out.FormKF "[x = 1, x = - 2]" => ()
   533 	 | _ => error "polyeq.sml: diff.behav. in  - 2 + x + x^2 = 0-> [x = 1, x = - 2]";
   534 
   535 
   536 "----------- equality (2 + x + x \<up> 2 = 0) ----------------------------------------------------";
   537 "----------- equality (2 + x + x \<up> 2 = 0) ----------------------------------------------------";
   538 "----------- equality (2 + x + x \<up> 2 = 0) ----------------------------------------------------";
   539 "----- d2_pqformula3_neg ------";
   540 val fmz = ["equality (2 + x + x \<up> 2 = 0)", "solveFor x", "solutions L"];
   541 val (dI',pI',mI') = ("PolyEq",["pqFormula", "degree_2", "polynomial", "univariate", "equation"],
   542                      ["PolyEq", "solve_d2_polyeq_pq_equation"]);
   543 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
   544 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   545 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   546 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   547 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   548 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   549 
   550 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   551 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   552 "TODO 2 + x + x \<up> 2 = 0";
   553 "TODO 2 + x + x \<up> 2 = 0";
   554 "TODO 2 + x + x \<up> 2 = 0";
   555 
   556 "----------- equality (- 2 + x + 1*x \<up> 2 = 0)) ------------------------------------------------";
   557 "----------- equality (- 2 + x + 1*x \<up> 2 = 0)) ------------------------------------------------";
   558 "----------- equality (- 2 + x + 1*x \<up> 2 = 0)) ------------------------------------------------";
   559 "----- d2_pqformula4 ------";
   560 val fmz = ["equality (- 2 + x + 1*x \<up> 2 = 0)", "solveFor x", "solutions L"];
   561 val (dI',pI',mI') = ("PolyEq",["pqFormula", "degree_2", "polynomial", "univariate", "equation"],
   562                      ["PolyEq", "solve_d2_polyeq_pq_equation"]);
   563 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
   564 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   565 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   566 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   567 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   568 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   569 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   570 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   571 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   572 case f of Test_Out.FormKF "[x = 1, x = - 2]" => ()
   573 	 | _ => error "polyeq.sml: diff.behav. in  - 2 + x + 1*x \<up> 2 = 0 -> [x = 1, x = - 2]";
   574 
   575 "----------- equality (1*x +   x \<up> 2 = 0) ----------------------------------------------------";
   576 "----------- equality (1*x +   x \<up> 2 = 0) ----------------------------------------------------";
   577 "----------- equality (1*x +   x \<up> 2 = 0) ----------------------------------------------------";
   578 "----- d2_pqformula5 ------";
   579 val fmz = ["equality (1*x +   x \<up> 2 = 0)", "solveFor x", "solutions L"];
   580 val (dI',pI',mI') = ("PolyEq",["pqFormula", "degree_2", "polynomial", "univariate", "equation"],
   581                      ["PolyEq", "solve_d2_polyeq_pq_equation"]);
   582 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
   583 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   584 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   585 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   586 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   587 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   588 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   589 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   590 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   591 case f of Test_Out.FormKF "[x = 0, x = - 1]" => ()
   592 	 | _ => error "polyeq.sml: diff.behav. in  1*x +   x^2 = 0 -> [x = 0, x = - 1]";
   593 
   594 "----------- equality (1*x + 1*x \<up> 2 = 0) ----------------------------------------------------";
   595 "----------- equality (1*x + 1*x \<up> 2 = 0) ----------------------------------------------------";
   596 "----------- equality (1*x + 1*x \<up> 2 = 0) ----------------------------------------------------";
   597 "----- d2_pqformula6 ------";
   598 val fmz = ["equality (1*x + 1*x \<up> 2 = 0)", "solveFor x", "solutions L"];
   599 val (dI',pI',mI') = ("PolyEq",["pqFormula", "degree_2", "polynomial", "univariate", "equation"],
   600                      ["PolyEq", "solve_d2_polyeq_pq_equation"]);
   601 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
   602 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   603 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   604 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   605 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   606 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   607 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   608 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   609 val (p,_,f,nxt,_,pt) = me nxt p [] pt; 
   610 case f of Test_Out.FormKF "[x = 0, x = - 1]" => ()
   611 	 | _ => error "polyeq.sml: diff.behav. in  1*x + 1*x^2 = 0 -> [x = 0, x = - 1]";
   612 
   613 "----------- equality (x +   x \<up> 2 = 0) ------------------------------------------------------";
   614 "----------- equality (x +   x \<up> 2 = 0) ------------------------------------------------------";
   615 "----------- equality (x +   x \<up> 2 = 0) ------------------------------------------------------";
   616 "----- d2_pqformula7 ------";
   617 (*EP- 10*)
   618 val fmz = ["equality (  x +   x \<up> 2 = 0)", "solveFor x", "solutions L"];
   619 val (dI',pI',mI') = ("PolyEq",["pqFormula", "degree_2", "polynomial", "univariate", "equation"],
   620                      ["PolyEq", "solve_d2_polyeq_pq_equation"]);
   621 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
   622 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   623 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   624 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   625 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   626 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   627 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   628 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   629 val (p,_,f,nxt,_,pt) = me nxt p [] pt; 
   630 case f of Test_Out.FormKF "[x = 0, x = - 1]" => ()
   631 	 | _ => error "polyeq.sml: diff.behav. in  x + x^2 = 0 -> [x = 0, x = - 1]";
   632 
   633 "----------- equality (x + 1*x \<up> 2 = 0) ------------------------------------------------------";
   634 "----------- equality (x + 1*x \<up> 2 = 0) ------------------------------------------------------";
   635 "----------- equality (x + 1*x \<up> 2 = 0) ------------------------------------------------------";
   636 "----- d2_pqformula8 ------";
   637 val fmz = ["equality (x + 1*x \<up> 2 = 0)", "solveFor x", "solutions L"];
   638 val (dI',pI',mI') = ("PolyEq",["pqFormula", "degree_2", "polynomial", "univariate", "equation"],
   639                      ["PolyEq", "solve_d2_polyeq_pq_equation"]);
   640 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
   641 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   642 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   643 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   644 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   645 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   646 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   647 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   648 val (p,_,f,nxt,_,pt) = me nxt p [] pt; 
   649 case f of Test_Out.FormKF "[x = 0, x = - 1]" => ()
   650 	 | _ => error "polyeq.sml: diff.behav. in  x + 1*x^2 = 0 -> [x = 0, x = - 1]";
   651 
   652 "----------- equality (-4 + x \<up> 2 = 0) -------------------------------------------------------";
   653 "----------- equality (-4 + x \<up> 2 = 0) -------------------------------------------------------";
   654 "----------- equality (-4 + x \<up> 2 = 0) -------------------------------------------------------";
   655 "----- d2_pqformula9 ------";
   656 val fmz = ["equality (-4 + x \<up> 2 = 0)", "solveFor x", "solutions L"];
   657 val (dI',pI',mI') = ("PolyEq",["pqFormula", "degree_2", "polynomial", "univariate", "equation"],
   658                      ["PolyEq", "solve_d2_polyeq_pq_equation"]);
   659 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
   660 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   661 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   662 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   663 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   664 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   665 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   666 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   667 case f of Test_Out.FormKF "[x = 2, x = - 2]" => ()
   668 	 | _ => error "polyeq.sml: diff.behav. in -4 + x^2 = 0 -> [x = 2, x = - 2]";
   669 
   670 
   671 "----------- equality (4 + 1*x \<up> 2 = 0) -------------------------------------------------------";
   672 "----------- equality (4 + 1*x \<up> 2 = 0) -------------------------------------------------------";
   673 "----------- equality (4 + 1*x \<up> 2 = 0) -------------------------------------------------------";
   674 "----- d2_pqformula9_neg ------";
   675 val fmz = ["equality (4 + 1*x \<up> 2 = 0)", "solveFor x", "solutions L"];
   676 val (dI',pI',mI') = ("PolyEq",["pqFormula", "degree_2", "polynomial", "univariate", "equation"],
   677                      ["PolyEq", "solve_d2_polyeq_pq_equation"]);
   678 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
   679 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   680 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   681 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   682 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   683 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   684 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   685 "TODO 4 + 1*x \<up> 2 = 0";
   686 "TODO 4 + 1*x \<up> 2 = 0";
   687 "TODO 4 + 1*x \<up> 2 = 0";
   688 
   689 "-------------------- test thm's d2_abc_formulsxx[_neg]-----";
   690 "-------------------- test thm's d2_abc_formulsxx[_neg]-----";
   691 "-------------------- test thm's d2_abc_formulsxx[_neg]-----";
   692 val fmz = ["equality (- 1 +(- 1)*x + 2*x \<up> 2 = 0)", "solveFor x", "solutions L"];
   693 val (dI',pI',mI') = ("PolyEq",["abcFormula", "degree_2", "polynomial", "univariate", "equation"],
   694                      ["PolyEq", "solve_d2_polyeq_abc_equation"]);
   695 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
   696 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   697 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   698 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   699 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   700 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   701 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   702 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   703 case f of Test_Out.FormKF "[x = 1, x = - 1 / 2]" => ()
   704 	 | _ => error "polyeq.sml: diff.behav. in - 1 + (- 1)*x + 2*x^2 = 0 -> [x = 1, x = - 1/2]";
   705 
   706 "----------- equality (1 +(- 1)*x + 2*x \<up> 2 = 0) ----------------------------------------------";
   707 "----------- equality (1 +(- 1)*x + 2*x \<up> 2 = 0) ----------------------------------------------";
   708 "----------- equality (1 +(- 1)*x + 2*x \<up> 2 = 0) ----------------------------------------------";
   709 val fmz = ["equality (1 +(- 1)*x + 2*x \<up> 2 = 0)", "solveFor x", "solutions L"];
   710 val (dI',pI',mI') = ("PolyEq",["abcFormula", "degree_2", "polynomial", "univariate", "equation"],
   711                      ["PolyEq", "solve_d2_polyeq_abc_equation"]);
   712 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
   713 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   714 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   715 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   716 
   717 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   718 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   719 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   720 "TODO 1 +(- 1)*x + 2*x \<up> 2 = 0";
   721 "TODO 1 +(- 1)*x + 2*x \<up> 2 = 0";
   722 "TODO 1 +(- 1)*x + 2*x \<up> 2 = 0";
   723 
   724 
   725 "----------- equality (- 1 + x + 2*x \<up> 2 = 0) -------------------------------------------------";
   726 "----------- equality (- 1 + x + 2*x \<up> 2 = 0) -------------------------------------------------";
   727 "----------- equality (- 1 + x + 2*x \<up> 2 = 0) -------------------------------------------------";
   728 (*EP- 11*)
   729 val fmz = ["equality (- 1 + x + 2*x \<up> 2 = 0)", "solveFor x", "solutions L"];
   730 val (dI',pI',mI') = ("PolyEq",["abcFormula", "degree_2", "polynomial", "univariate", "equation"],
   731                      ["PolyEq", "solve_d2_polyeq_abc_equation"]);
   732 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
   733 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   734 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   735 
   736 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   737 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   738 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   739 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   740 
   741 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   742 case f of Test_Out.FormKF "[x = 1 / 2, x = - 1]" => ()
   743 	 | _ => error "polyeq.sml: diff.behav. in - 1 + x + 2*x^2 = 0 -> [x = 1/2, x = - 1]";
   744 
   745 
   746 "----------- equality (1 + x + 2*x \<up> 2 = 0) --------------------------------------------------";
   747 "----------- equality (1 + x + 2*x \<up> 2 = 0) --------------------------------------------------";
   748 "----------- equality (1 + x + 2*x \<up> 2 = 0) --------------------------------------------------";
   749 val fmz = ["equality (1 + x + 2*x \<up> 2 = 0)", "solveFor x", "solutions L"];
   750 val (dI',pI',mI') = ("PolyEq",["abcFormula", "degree_2", "polynomial", "univariate", "equation"],
   751                      ["PolyEq", "solve_d2_polyeq_abc_equation"]);
   752 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
   753 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   754 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   755 
   756 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   757 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   758 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   759 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   760 val (p,_,f,nxt,_,pt) = me nxt p [] pt; 
   761 "TODO 1 + x + 2*x \<up> 2 = 0";
   762 "TODO 1 + x + 2*x \<up> 2 = 0";
   763 "TODO 1 + x + 2*x \<up> 2 = 0";
   764 
   765 
   766 val fmz = ["equality (- 2 + 1*x + x \<up> 2 = 0)", "solveFor x", "solutions L"];
   767 val (dI',pI',mI') = ("PolyEq",["abcFormula", "degree_2", "polynomial", "univariate", "equation"],
   768                      ["PolyEq", "solve_d2_polyeq_abc_equation"]);
   769 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
   770 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   771 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   772 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   773 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   774 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   775 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   776 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   777 case f of Test_Out.FormKF "[x = 1, x = - 2]" => ()
   778 	 | _ => error "polyeq.sml: diff.behav. in - 2 + 1*x + x^2 = 0 -> [x = 1, x = - 2]";
   779 
   780 val fmz = ["equality ( 2 + 1*x + x \<up> 2 = 0)", "solveFor x", "solutions L"];
   781 val (dI',pI',mI') = ("PolyEq",["abcFormula", "degree_2", "polynomial", "univariate", "equation"],
   782                      ["PolyEq", "solve_d2_polyeq_abc_equation"]);
   783 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
   784 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   785 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   786 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   787 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   788 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   789 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   790 val (p,_,f,nxt,_,pt) = me nxt p [] pt; 
   791 "TODO 2 + 1*x + x \<up> 2 = 0";
   792 "TODO 2 + 1*x + x \<up> 2 = 0";
   793 "TODO 2 + 1*x + x \<up> 2 = 0";
   794 
   795 (*EP- 12*)
   796 val fmz = ["equality (- 2 + x + x \<up> 2 = 0)", "solveFor x", "solutions L"];
   797 val (dI',pI',mI') = ("PolyEq",["abcFormula", "degree_2", "polynomial", "univariate", "equation"],
   798                      ["PolyEq", "solve_d2_polyeq_abc_equation"]);
   799 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
   800 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   801 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   802 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   803 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   804 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   805 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   806 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   807 case f of Test_Out.FormKF "[x = 1, x = - 2]" => ()
   808 	 | _ => error "polyeq.sml: diff.behav. in - 2 + x + x^2 = 0 -> [x = 1, x = - 2]";
   809 
   810 val fmz = ["equality ( 2 + x + x \<up> 2 = 0)", "solveFor x", "solutions L"];
   811 val (dI',pI',mI') = ("PolyEq",["abcFormula", "degree_2", "polynomial", "univariate", "equation"],
   812                      ["PolyEq", "solve_d2_polyeq_abc_equation"]);
   813 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
   814 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   815 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   816 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   817 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   818 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   819 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   820 val (p,_,f,nxt,_,pt) = me nxt p [] pt; 
   821 "TODO 2 + x + x \<up> 2 = 0";
   822 "TODO 2 + x + x \<up> 2 = 0";
   823 "TODO 2 + x + x \<up> 2 = 0";
   824 
   825 (*EP- 13*)
   826 val fmz = ["equality (-8 + 2*x \<up> 2 = 0)", "solveFor x", "solutions L"];
   827 val (dI',pI',mI') = ("PolyEq",["abcFormula", "degree_2", "polynomial", "univariate", "equation"],
   828                      ["PolyEq", "solve_d2_polyeq_abc_equation"]);
   829 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
   830 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   831 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   832 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   833 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   834 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   835 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   836 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   837 case f of Test_Out.FormKF "[x = 2, x = - 2]" => ()
   838 	 | _ => error "polyeq.sml: diff.behav. in -8 + 2*x^2 = 0 -> [x = 2, x = - 2]";
   839 
   840 val fmz = ["equality ( 8+ 2*x \<up> 2 = 0)", "solveFor x", "solutions L"];
   841 val (dI',pI',mI') = ("PolyEq",["abcFormula", "degree_2", "polynomial", "univariate", "equation"],
   842                      ["PolyEq", "solve_d2_polyeq_abc_equation"]);
   843 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
   844 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   845 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   846 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   847 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   848 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   849 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   850 "TODO 8+ 2*x \<up> 2 = 0";
   851 "TODO 8+ 2*x \<up> 2 = 0";
   852 "TODO 8+ 2*x \<up> 2 = 0";
   853 
   854 (*EP- 14*)
   855 val fmz = ["equality (-4 + x \<up> 2 = 0)", "solveFor x", "solutions L"];
   856 val (dI',pI',mI') = ("PolyEq",["abcFormula", "degree_2", "polynomial", "univariate", "equation"], ["PolyEq", "solve_d2_polyeq_abc_equation"]);
   857 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
   858 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   859 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   860 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   861 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   862 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   863 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   864 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   865 case f of Test_Out.FormKF "[x = 2, x = - 2]" => ()
   866 	 | _ => error "polyeq.sml: diff.behav. in -4 + x^2 = 0 -> [x = 2, x = - 2]";
   867 
   868 
   869 val fmz = ["equality ( 4+ x \<up> 2 = 0)", "solveFor x", "solutions L"];
   870 val (dI',pI',mI') = ("PolyEq",["abcFormula", "degree_2", "polynomial", "univariate", "equation"], ["PolyEq", "solve_d2_polyeq_abc_equation"]);
   871 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
   872 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   873 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   874 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   875 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   876 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   877 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   878 "TODO 4+ x \<up> 2 = 0";
   879 "TODO 4+ x \<up> 2 = 0";
   880 "TODO 4+ x \<up> 2 = 0";
   881 
   882 (*EP- 15*)
   883 val fmz = ["equality (2*x + 2*x \<up> 2 = 0)", "solveFor x", "solutions L"];
   884 val (dI',pI',mI') = ("PolyEq",["abcFormula", "degree_2", "polynomial", "univariate", "equation"],
   885                      ["PolyEq", "solve_d2_polyeq_abc_equation"]);
   886 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
   887 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   888 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   889 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   890 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   891 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   892 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   893 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   894 case f of Test_Out.FormKF "[x = 0, x = - 1]" => ()
   895 	 | _ => error "polyeq.sml: diff.behav. in x + x^2 = 0 -> [x = 0, x = - 1]";
   896 
   897 val fmz = ["equality (1*x + x \<up> 2 = 0)", "solveFor x", "solutions L"];
   898 val (dI',pI',mI') = ("PolyEq",["abcFormula", "degree_2", "polynomial", "univariate", "equation"],
   899                      ["PolyEq", "solve_d2_polyeq_abc_equation"]);
   900 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
   901 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   902 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   903 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   904 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   905 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   906 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   907 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   908 case f of Test_Out.FormKF "[x = 0, x = - 1]" => ()
   909 	 | _ => error "polyeq.sml: diff.behav. in x + x^2 = 0 -> [x = 0, x = - 1]";
   910 
   911 (*EP- 16*)
   912 val fmz = ["equality (x + 2*x \<up> 2 = 0)", "solveFor x", "solutions L"];
   913 val (dI',pI',mI') = ("PolyEq",["abcFormula", "degree_2", "polynomial", "univariate", "equation"],
   914                      ["PolyEq", "solve_d2_polyeq_abc_equation"]);
   915 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
   916 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   917 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   918 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   919 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   920 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   921 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   922 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   923 case f of Test_Out.FormKF "[x = 0, x = - 1 / 2]" => ()
   924 	 | _ => error "polyeq.sml: diff.behav. in x + x^2 = 0 -> [x = 0, x = - 1 / 2]";
   925 
   926 (*EP-//*)
   927 val fmz = ["equality (x + x \<up> 2 = 0)", "solveFor x", "solutions L"];
   928 val (dI',pI',mI') = ("PolyEq",["abcFormula", "degree_2", "polynomial", "univariate", "equation"],
   929                      ["PolyEq", "solve_d2_polyeq_abc_equation"]);
   930 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
   931 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   932 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   933 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   934 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   935 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   936 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   937 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   938 case f of Test_Out.FormKF "[x = 0, x = - 1]" => ()
   939 	 | _ => error "polyeq.sml: diff.behav. in x + x^2 = 0 -> [x = 0, x = - 1]";
   940 
   941 
   942 "----------- (-8 - 2*x + x \<up> 2 = 0),  (*Schalk 2, S.67 Nr.31.b----";
   943 "----------- (-8 - 2*x + x \<up> 2 = 0),  (*Schalk 2, S.67 Nr.31.b----";
   944 "----------- (-8 - 2*x + x \<up> 2 = 0),  (*Schalk 2, S.67 Nr.31.b----";
   945 (*stopped du to TODO.txt WN111014.TODO calculate_Poly < calculate_Rational < calculate_RootRat
   946 see --- val rls = calculate_RootRat > calculate_Rational ---
   947 calculate_RootRat was a TODO with 2002, requires re-design.
   948 see also --- (-8 - 2*x + x \<up> 2 = 0),  by rewriting --- below
   949 *)
   950  val fmz = ["equality (-8 - 2*x + x \<up> 2 = 0)", (*Schalk 2, S.67 Nr.31.b*)
   951  	    "solveFor x", "solutions L"];
   952  val (dI',pI',mI') =
   953      ("PolyEq",["degree_2", "expanded", "univariate", "equation"],
   954       ["PolyEq", "complete_square"]);
   955 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
   956 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   957 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   958 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   959 
   960 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   961 (*Apply_Method ("PolyEq", "complete_square")*)
   962 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   963 (*"-8 - 2 * x + x \<up> 2 = 0", nxt = Rewrite_Set_Inst ... "complete_square*)
   964 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   965 (*"-8 + (2 / 2 - x) \<up> 2 = (2 / 2) \<up> 2", nxt = Rewrite("square_explicit1"*)
   966 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   967 (*"(2 / 2 - x) \<up> 2 = (2 / 2) \<up> 2 - -8" nxt = Rewrite("root_plus_minus*)
   968 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   969 (*"2 / 2 - x = sqrt ((2 / 2) \<up> 2 - -8) |
   970    2 / 2 - x = - sqrt ((2 / 2) \<up> 2 - -8)" nxt = Rewr_Inst("bdv_explicit2"*)
   971 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   972 (*"2 / 2 - x = sqrt ((2 / 2) \<up> 2 - -8) |
   973    - 1*x = - (2 / 2) + - sqrt ((2 / 2) \<up> 2 - -8)"nxt = R_Inst("bdv_explt2"*)
   974 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   975 (*"- 1 * x = - (2 / 2) + sqrt ((2 / 2) \<up> 2 - -8) |
   976    - 1 * x = (- (2 / 2) + - sqrt ((2 / 2) \<up> 2 - -8))"nxt = bdv_explicit3*)
   977 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   978 (*"- 1 * x = - (2 / 2) + sqrt ((2 / 2) \<up> 2 - -8) |
   979   x = - 1 * (- (2 / 2) + - sqrt ((2 / 2) \<up> 2 - -8))" nxt = bdv_explicit3*)
   980 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   981 (*"x = - 1 * (- (2 / 2) + sqrt ((2 / 2) \<up> 2 - -8)) |
   982    x = - 1 * (- (2 / 2) + - sqrt ((2 / 2) \<up> 2 - -8))"nxt = calculate_Rational
   983    NOT IMPLEMENTED SINCE 2002 ------------------------------ \<up> \<up> \<up> \<up> \<up>  \<up> *)
   984 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   985 (*"x = - 2 | x = 4" nxt = Or_to_List*)
   986 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
   987 (*"[x = - 2, x = 4]" nxt = Check_Postcond*)
   988 val (p,_,f,nxt,_,pt) = me nxt p [] pt; f2str f;
   989 (* FIXXXME 
   990  case f of Form' (Test_Out.FormKF (~1,EdUndef,0,Nundef,"[x = - 2, x = 4]")) => () TODO
   991 	 | _ => error "polyeq.sml: diff.behav. in [x = - 2, x = 4]";
   992 *)
   993 if f2str f =
   994 "[x = - 1 * - 1 + - 1 * sqrt (2 \<up> 2 / 2 \<up> 2 - -8),\n x = - 1 * - 1 + - 1 * (- 1 * sqrt (2 \<up> 2 / 2 \<up> 2 - -8))]"
   995 (*"[x = - 1 * - 1 + - 1 * sqrt (1 \<up> 2 - -8),\n x = - 1 * - 1 + - 1 * (- 1 * sqrt (1 \<up> 2 - -8))]"*)
   996 then () else error "polyeq.sml corrected?behav. in [x = - 2, x = 4]";
   997 
   998 
   999 "----------- (-8 - 2*x + x \<up> 2 = 0),  by rewriting ---------------";
  1000 "----------- (-8 - 2*x + x \<up> 2 = 0),  by rewriting ---------------";
  1001 "----------- (-8 - 2*x + x \<up> 2 = 0),  by rewriting ---------------";
  1002 (*stopped du to TODO.txt WN111014.TODO calculate_Poly < calculate_Rational < calculate_RootRat
  1003 see --- val rls = calculate_RootRat > calculate_Rational ---*)
  1004 val thy = @{theory PolyEq};
  1005 val ctxt = Proof_Context.init_global thy;
  1006 val inst = [((the o (parseNEW  ctxt)) "bdv::real", (the o (parseNEW  ctxt)) "x::real")];
  1007 val t = (the o (parseNEW  ctxt)) "-8 - 2*x + x \<up> 2 = (0::real)";
  1008 
  1009 val rls = complete_square;
  1010 val SOME (t,asm) = rewrite_set_inst_ thy true inst rls t;
  1011 UnparseC.term t = "-8 + (2 / 2 - x) \<up> 2 = (2 / 2) \<up> 2";
  1012 
  1013 val thm = ThmC.numerals_to_Free @{thm square_explicit1};
  1014 val SOME (t,asm) = rewrite_ thy dummy_ord Rule_Set.Empty true thm t;
  1015 UnparseC.term t = "(2 / 2 - x) \<up> 2 = (2 / 2) \<up> 2 - -8";
  1016 
  1017 val thm = ThmC.numerals_to_Free @{thm root_plus_minus};
  1018 val SOME (t,asm) = rewrite_ thy dummy_ord PolyEq_erls true thm t;
  1019 UnparseC.term t = "2 / 2 - x = sqrt ((2 / 2) \<up> 2 - -8) |"^
  1020            "\n2 / 2 - x = - 1 * sqrt ((2 / 2) \<up> 2 - -8)";
  1021 
  1022 (*the thm bdv_explicit2* here required to be constrained to ::real*)
  1023 val thm = ThmC.numerals_to_Free @{thm bdv_explicit2};
  1024 val SOME (t,asm) = rewrite_inst_ thy dummy_ord Rule_Set.Empty true inst thm t;
  1025 UnparseC.term t = "2 / 2 - x = sqrt ((2 / 2) \<up> 2 - -8) |"^
  1026               "\n- 1 * x = - (2 / 2) + - 1 * sqrt ((2 / 2) \<up> 2 - -8)";
  1027 
  1028 val thm = ThmC.numerals_to_Free @{thm bdv_explicit3};
  1029 val SOME (t,asm) = rewrite_inst_ thy dummy_ord Rule_Set.Empty true inst thm t;
  1030 UnparseC.term t = "2 / 2 - x = sqrt ((2 / 2) \<up> 2 - -8) |"^
  1031                    "\nx = - 1 * (- (2 / 2) + - 1 * sqrt ((2 / 2) \<up> 2 - -8))";
  1032 
  1033 val thm = ThmC.numerals_to_Free @{thm bdv_explicit2};
  1034 val SOME (t,asm) = rewrite_inst_ thy dummy_ord Rule_Set.Empty true inst thm t;
  1035 UnparseC.term t = "- 1 * x = - (2 / 2) + sqrt ((2 / 2) \<up> 2 - -8) |"^
  1036                 "\nx = - 1 * (- (2 / 2) + - 1 * sqrt ((2 / 2) \<up> 2 - -8))";
  1037 
  1038 val rls = calculate_RootRat;
  1039 val SOME (t,asm) = rewrite_set_ thy true rls t;
  1040 if UnparseC.term t =
  1041   "- 1 * x = - 1 + sqrt (2 \<up> 2 / 2 \<up> 2 - -8) \<or>\nx = - 1 * - 1 + - 1 * (- 1 * sqrt (2 \<up> 2 / 2 \<up> 2 - -8))"
  1042 (*"- 1 * x = - 1 + sqrt (2 \<up> 2 / 2 \<up> 2 - -8) |\nx = - 1 * - 1 + - 1 * (- 1 * sqrt (2 \<up> 2 / 2 \<up> 2 - -8))"..isabisac15*)
  1043 then () else error "(-8 - 2*x + x \<up> 2 = 0),  by rewriting -- ERROR INDICATES IMPROVEMENT";
  1044 (*SHOULD BE: UnparseC.term = "x = - 2 | x = 4;*)
  1045 
  1046 
  1047 "-------------------- (3 - 10*x + 3*x \<up> 2 = 0), ----------------------";
  1048 "-------------------- (3 - 10*x + 3*x \<up> 2 = 0), ----------------------";
  1049 "-------------------- (3 - 10*x + 3*x \<up> 2 = 0), ----------------------";
  1050 "---- test the erls ----";
  1051  val t1 = (Thm.term_of o the o (TermC.parse thy)) "0 <= (10/3/2) \<up> 2 - 1";
  1052  val SOME (t,_) = rewrite_set_ @{theory PolyEq} false PolyEq_erls t1;
  1053  val t' = UnparseC.term t;
  1054  (*if t'= \<^const_name>\<open>True\<close> then ()
  1055  else error "polyeq.sml: diff.behav. in 'rewrite_set_.. PolyEq_erls";*)
  1056 (* *)
  1057  val fmz = ["equality (3 - 10*x + 3*x \<up> 2 = 0)",
  1058  	    "solveFor x", "solutions L"];
  1059  val (dI',pI',mI') =
  1060      ("PolyEq",["degree_2", "expanded", "univariate", "equation"],
  1061       ["PolyEq", "complete_square"]);
  1062 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
  1063 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  1064  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  1065  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  1066  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  1067  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  1068  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  1069  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  1070  (*Apply_Method ("PolyEq", "complete_square")*)
  1071  val (p,_,f,nxt,_,pt) = me nxt p [] pt; f2str f;
  1072 
  1073 "----------- (- 16 + 4*x + 2*x \<up> 2 = 0), --------------------------";
  1074 "----------- (- 16 + 4*x + 2*x \<up> 2 = 0), --------------------------";
  1075 "----------- (- 16 + 4*x + 2*x \<up> 2 = 0), --------------------------";
  1076  val fmz = ["equality (- 16 + 4*x + 2*x \<up> 2 = 0)",
  1077  	    "solveFor x", "solutions L"];
  1078  val (dI',pI',mI') =
  1079      ("PolyEq",["degree_2", "expanded", "univariate", "equation"],
  1080       ["PolyEq", "complete_square"]);
  1081 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
  1082 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  1083  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  1084  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  1085  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  1086  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  1087  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  1088  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  1089  (*Apply_Method ("PolyEq", "complete_square")*)
  1090  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  1091  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  1092  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  1093  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  1094  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  1095  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  1096  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  1097  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  1098  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  1099  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
  1100 (* FIXXXXME n1.,
  1101  case f of Form' (Test_Out.FormKF (~1,EdUndef,0,Nundef,"[x = 2, x = -4]")) => () TODO
  1102 	 | _ => error "polyeq.sml: diff.behav. in [x = 2, x = -4]";
  1103 *)
  1104