test/Tools/isac/Test_Some.thy
changeset 60413 e997d57fbf7d
parent 60409 432482c14d96
child 60417 00ba9518dc35
equal deleted inserted replaced
60412:4d907cbc967c 60413:e997d57fbf7d
   102 \<close> ML \<open>
   102 \<close> ML \<open>
   103 \<close> ML \<open>
   103 \<close> ML \<open>
   104 \<close> ML \<open>
   104 \<close> ML \<open>
   105 \<close>
   105 \<close>
   106 
   106 
   107 section \<open>====== comment simplification of numerals =========================================\<close>
   107 section \<open>===================================================================================\<close>
   108 ML \<open>
       
   109 \<close> ML \<open> (* \<longrightarrow> test/../base-definitions.sml NEW FILE *)
       
   110 "----------- note on new realpow ------- -------------------------------------------------------";
       
   111 "----------- note on new realpow ------- -------------------------------------------------------";
       
   112 "----------- note on new realpow ------- -------------------------------------------------------";
       
   113 
       
   114 (* this and other numeral calculations have been accomplished by Simplifier.rewrite so far *)
       
   115 
       
   116 val t = calcul @{theory} @{term "4 * - 1 * 4 ::real"};
       
   117 if UnparseC.term_in_ctxt @{context} t = "- 16"
       
   118 then () else error "calcul  4 * - 1 * 4 \<longrightarrow> - 16";
       
   119 \<close> ML \<open>
       
   120 
       
   121 (* guess: simp_ctxt is not sufficient for simplifying the conditions in the definition *)
       
   122 (*
       
   123   if-then-else \<and> < \<ge> even_real odd_real are possible reasons for insufficiency.
       
   124 *)
       
   125 val t = calcul @{theory} @{term "4 \<up> 2 ::real"};
       
   126 if UnparseC.term_in_ctxt @{context} t = "16"
       
   127 then () else error "calcul  4 \<up> 2 \<longrightarrow> 16";
       
   128 \<close> ML \<open>
       
   129 val t = calcul @{theory} @{term "(- 1) \<up> 2"};
       
   130 if UnparseC.term_in_ctxt @{context} t = "1"
       
   131 then () else error "calcul  (- 1) \<up> 2 \<longrightarrow> 1";
       
   132 
       
   133 (* note on example "4 * - 1 * 4 \<up> 2 \<le> 8 * (- 1) \<up> 2" *)
       
   134 (*
       
   135   fun calcul should simplify both sides of the inequality. 
       
   136   Afterwards the inequality  - 64 \<le> 8  should evaluate to True.
       
   137 
       
   138   But we get the error:
       
   139     rew_once: 
       
   140     Eval.get_pair for "BaseDefinitions.realpow" \<longrightarrow> SOME (_, "4 \<up> 2 = 4 \<up> 2")
       
   141     but rewrite__ on "4 * - 1 * 4 \<up> 2 \<le> 8 * (- 1) \<up> 2" \<longrightarrow> NONE
       
   142 
       
   143   The error occurs while rewriting and expecting \<longrightarrow> SOME (_, "4 \<up> 2 = 16");
       
   144   the rewriter takes the rhs 4 \<up> 2, the same as the lhs, 
       
   145   and assumes to be able to simplify, but we have lhs = rhs \<longrightarrow> NONE, 
       
   146   which is recognised by the rewriter as an error.
       
   147 
       
   148   Eval.get_pair ensures, that only pairs of numerals are passed to fun calcul,
       
   149   such that single-stepping is realised, although Simplifier.rewrite could do all at once.
       
   150 
       
   151   \<le> is a binary operator, too, but has another signature as algebraic operations.
       
   152   So \<le> is handled separately and not by fun calcul.
       
   153 *)
       
   154 \<close> ML \<open>
       
   155 \<close>
       
   156 
       
   157 section \<open>====== check Knowledge/polyeq-1.sml ===============================================\<close>
       
   158 ML \<open>
   108 ML \<open>
   159 \<close> ML \<open>
   109 \<close> ML \<open>
   160 (* Title:  Knowledge/polyeq-1.sml
       
   161            testexamples for PolyEq, poynomial equations and equational systems
       
   162    Author: Richard Lang 2003  
       
   163    (c) due to copyright terms
       
   164 
       
   165 Separation into polyeq-1.sml and polyeq-1a.sml due to 
       
   166 *)
       
   167 
       
   168 "-----------------------------------------------------------------";
       
   169 "table of contents -----------------------------------------------";
       
   170 "-----------------------------------------------------------------";
       
   171 "------ polyeq-1.sml ---------------------------------------------";
       
   172 "----------- tests on predicates in problems ---------------------";
       
   173 "----------- test matching problems ------------------------------";
       
   174 "----------- prep. for introduction of Matthias Goldgruber 2003 trials on rewrite orders -----";
       
   175 "----------- open local of fun ord_make_polynomial_in ------------------------------------------";
       
   176 "----------- Matthias Goldgruber 2003 trials on rewrite orders -------------------------------";
       
   177 "----------- lin.eq degree_0 -------------------------------------";
       
   178 "----------- test thm's d2_pq_formulsxx[_neg]---------------------";
       
   179 "----------- equality (2 +(- 1)*x + x \<up> 2 = (0::real)) ----------------------------------------";
       
   180 "----------- equality (- 2 +(- 1)*x + 1*x \<up> 2 = 0) ---------------------------------------------";
       
   181 "----------- equality (- 2 + x + x \<up> 2 = 0) ---------------------------------------------------";
       
   182 "----------- equality (2 + x + x \<up> 2 = 0) ----------------------------------------------------";
       
   183 "----------- equality (- 2 + x + 1*x \<up> 2 = 0)) ------------------------------------------------";
       
   184 "----------- equality (1*x +   x \<up> 2 = 0) ----------------------------------------------------";
       
   185 "----------- equality (1*x + 1*x \<up> 2 = 0) ----------------------------------------------------";
       
   186 "----------- equality (x +   x \<up> 2 = 0) ------------------------------------------------------";
       
   187 "----------- equality (x + 1*x \<up> 2 = 0) ------------------------------------------------------";
       
   188 "----------- equality (-4 + x \<up> 2 = 0) -------------------------------------------------------";
       
   189 "----------- equality (4 + 1*x \<up> 2 = 0) -------------------------------------------------------";
       
   190 "----------- equality (1 +(- 1)*x + 2*x \<up> 2 = 0) ----------------------------------------------";
       
   191 "----------- equality (- 1 + x + 2*x \<up> 2 = 0) -------------------------------------------------";
       
   192 "----------- equality (1 + x + 2*x \<up> 2 = 0) --------------------------------------------------";
       
   193 "----------- (-8 - 2*x + x \<up> 2 = 0),  (*Schalk 2, S.67 Nr.31.b----";
       
   194 "----------- (-8 - 2*x + x \<up> 2 = 0),  by rewriting ---------------";
       
   195 "----------- (- 16 + 4*x + 2*x \<up> 2 = 0), --------------------------";
       
   196 "-----------------------------------------------------------------";
       
   197 "------ polyeq-2.sml ---------------------------------------------";
       
   198 "----------- (a*b - (a+b)*x + x \<up> 2 = 0), (*Schalk 2,S.68Nr.44.a*)";
       
   199 "----------- (-64 + x \<up> 2 = 0), (*Schalk 2, S.66 Nr.1.a~--------*)";
       
   200 "----------- (- 147 + 3*x \<up> 2 = 0), (*Schalk 2, S.66 Nr.1.b------*)";
       
   201 "----------- (3*x - 1 - (5*x - (2 - 4*x)) = - 11),(*Schalk Is86Bsp5";
       
   202 "----------- ((x+1)*(x+2) - (3*x - 2) \<up> 2=.. Schalk II s.68 Bsp 37";
       
   203 "----------- rls make_polynomial_in ------------------------------";
       
   204 "----------- interSteps ([1],Res); on Schalk Is86Bsp5-------------";
       
   205 "----------- rls d2_polyeq_bdv_only_simplify ---------------------";
       
   206 "-----------------------------------------------------------------";
       
   207 "-----------------------------------------------------------------";
       
   208 
       
   209 \<close> ML \<open>
       
   210 Rewrite.trace_on := false (*false true*);
       
   211 "----------- tests on predicates in problems ---------------------";
       
   212 "----------- tests on predicates in problems ---------------------";
       
   213 "----------- tests on predicates in problems ---------------------";
       
   214 val thy = @{theory};
       
   215 Rewrite.trace_on:=false;  (*true false*)
       
   216 
       
   217  val t1 = (Thm.term_of o the o (TermC.parse thy)) "lhs (-8 - 2*x + x \<up> 2 = 0)";
       
   218  val SOME (t,_) = rewrite_set_ @{theory PolyEq} false PolyEq_prls t1;
       
   219  if ((UnparseC.term t) = "- 8 - 2 * x + x \<up> 2") then ()
       
   220  else  error "polyeq.sml: diff.behav. in lhs";
       
   221 
       
   222 \<close> ML \<open>
       
   223  val t2 = (Thm.term_of o the o (TermC.parse thy)) "(-8 - 2*x + x \<up> 2) is_expanded_in x";
       
   224  val SOME (t,_) = rewrite_set_ @{theory PolyEq} false PolyEq_prls t2;
       
   225  if (UnparseC.term t) = "True" then ()
       
   226  else  error "polyeq.sml: diff.behav. 1 in is_expended_in";
       
   227 
       
   228  val t0 = (Thm.term_of o the o (TermC.parse thy)) "(sqrt(x)) is_poly_in x";
       
   229  val SOME (t,_) = rewrite_set_ @{theory PolyEq} false PolyEq_prls t0;
       
   230  if (UnparseC.term t) = "False" then ()
       
   231  else  error "polyeq.sml: diff.behav. 2 in is_poly_in";
       
   232 
       
   233  val t3 = (Thm.term_of o the o (TermC.parse thy)) "(-8 + (- 1)*2*x + x \<up> 2) is_poly_in x";
       
   234  val SOME (t,_) = rewrite_set_ @{theory PolyEq} false PolyEq_prls t3;
       
   235  if (UnparseC.term t) = "True" then ()
       
   236  else  error "polyeq.sml: diff.behav. 3 in is_poly_in";
       
   237 
       
   238  val t4 = (Thm.term_of o the o (TermC.parse thy)) "(lhs (-8 + (- 1)*2*x + x \<up> 2 = 0)) is_expanded_in x";
       
   239  val SOME (t,_) = rewrite_set_ @{theory PolyEq} false PolyEq_prls t4;
       
   240  if (UnparseC.term t) = "True" then ()
       
   241  else  error "polyeq.sml: diff.behav. 4 in is_expended_in";
       
   242 
       
   243  val t6 = (Thm.term_of o the o (TermC.parse thy)) "(lhs (-8 - 2*x + x \<up> 2 = 0)) is_expanded_in x";
       
   244  val SOME (t,_) = rewrite_set_ @{theory PolyEq} false PolyEq_prls t6;
       
   245  if (UnparseC.term t) = "True" then ()
       
   246  else  error "polyeq.sml: diff.behav. 5 in is_expended_in";
       
   247  
       
   248  val t3 = (Thm.term_of o the o (TermC.parse thy))"((-8 - 2*x + x \<up> 2) has_degree_in x) = 2";
       
   249  val SOME (t,_) = rewrite_set_ @{theory PolyEq} false PolyEq_prls t3;
       
   250  if (UnparseC.term t) = "True" then ()
       
   251  else  error "polyeq.sml: diff.behav. in has_degree_in_in";
       
   252 
       
   253  val t3 = (Thm.term_of o the o (TermC.parse thy)) "((sqrt(x)) has_degree_in x) = 2";
       
   254  val SOME (t,_) = rewrite_set_ @{theory PolyEq} false PolyEq_prls t3;
       
   255  if (UnparseC.term t) = "False" then ()
       
   256  else  error "polyeq.sml: diff.behav. 6 in has_degree_in_in";
       
   257 
       
   258  val t4 = (Thm.term_of o the o (TermC.parse thy)) 
       
   259 	      "((-8 - 2*x + x \<up> 2) has_degree_in x) = 1";
       
   260  val SOME (t,_) = rewrite_set_ @{theory PolyEq} false PolyEq_prls t4;
       
   261  if (UnparseC.term t) = "False" then ()
       
   262  else  error "polyeq.sml: diff.behav. 7 in has_degree_in_in";
       
   263 
       
   264 val t5 = (Thm.term_of o the o (TermC.parse thy)) 
       
   265 	      "((-8 - 2*x + x \<up> 2) has_degree_in x) = 2";
       
   266  val SOME (t,_) = rewrite_set_ @{theory PolyEq} false PolyEq_prls t5;
       
   267  if (UnparseC.term t) = "True" then ()
       
   268  else  error "polyeq.sml: diff.behav. 8 in has_degree_in_in";
       
   269 
       
   270 \<close> ML \<open>
       
   271 "----------- test matching problems --------------------------0---";
       
   272 "----------- test matching problems --------------------------0---";
       
   273 "----------- test matching problems --------------------------0---";
       
   274 val fmz = ["equality (-8 - 2*x + x \<up> 2 = 0)", "solveFor x", "solutions L"];
       
   275 if M_Match.match_pbl fmz (Problem.from_store ["expanded", "univariate", "equation"]) =
       
   276   M_Match.Matches' {Find = [Correct "solutions L"], 
       
   277             With = [], 
       
   278             Given = [Correct "equality (- 8 - 2 * x + x \<up> 2 = 0)", Correct "solveFor x"], 
       
   279             Where = [Correct "matches (?a = 0) (- 8 - 2 * x + x \<up> 2 = 0)", 
       
   280                      Correct "lhs (- 8 - 2 * x + x \<up> 2 = 0) is_expanded_in x"], 
       
   281             Relate = []}
       
   282 then () else error "M_Match.match_pbl [expanded,univariate,equation]";
       
   283 
       
   284 if M_Match.match_pbl fmz (Problem.from_store ["degree_2", "expanded", "univariate", "equation"]) =
       
   285   M_Match.Matches' {Find = [Correct "solutions L"], 
       
   286             With = [], 
       
   287             Given = [Correct "equality (- 8 - 2 * x + x \<up> 2 = 0)", Correct "solveFor x"], 
       
   288             Where = [Correct "lhs (- 8 - 2 * x + x \<up> 2 = 0) has_degree_in x = 2"], 
       
   289             Relate = []}              (*before WN110906 was: has_degree_in x =!= 2"]*)
       
   290 then () else error "M_Match.match_pbl [degree_2,expanded,univariate,equation]";
       
   291 
       
   292 
       
   293 \<close> ML \<open>
       
   294 "----------- prep. for introduction of Matthias Goldgruber 2003 trials on rewrite orders -----";
       
   295 "----------- prep. for introduction of Matthias Goldgruber 2003 trials on rewrite orders -----";
       
   296 "----------- prep. for introduction of Matthias Goldgruber 2003 trials on rewrite orders -----";
       
   297 (*##################################################################################
       
   298 ----------- 28.2.03: war nicht upgedatet und ausgeklammert in ROOT.ML-->Test_Isac.thy
       
   299 
       
   300   (*Aufgabe zum Einstieg in die Arbeit...*)
       
   301   val t = (Thm.term_of o the o (TermC.parse thy)) "a*b - (a+b)*x + x \<up> 2 = 0";
       
   302   (*ein 'ruleset' aus Poly.ML wird angewandt...*)
       
   303   val SOME (t,_) = rewrite_set_ thy Poly_erls false make_polynomial t;
       
   304   UnparseC.term t;
       
   305   "a * b + (- 1 * (a * x) + (- 1 * (b * x) + x \<up> 2)) = 0";
       
   306   val SOME (t,_) = 
       
   307       rewrite_set_inst_ thy Poly_erls false [("bdv", "a")] make_polynomial_in t;
       
   308   UnparseC.term t;
       
   309   "x \<up> 2 + (- 1 * (b * x) + (- 1 * (x * a) + b * a)) = 0";
       
   310 (* bei Verwendung von "size_of-term" nach MG :*)
       
   311 (*"x \<up> 2 + (- 1 * (b * x) + (b * a + - 1 * (x * a))) = 0"  !!! *)
       
   312 
       
   313   (*wir holen 'a' wieder aus der Klammerung heraus...*)
       
   314   val SOME (t,_) = rewrite_set_ thy Poly_erls false discard_parentheses t;
       
   315   UnparseC.term t;
       
   316    "x \<up> 2 + - 1 * b * x + - 1 * x * a + b * a = 0";
       
   317 (* "x \<up> 2 + - 1 * b * x + b * a + - 1 * x * a = 0" !!! *)
       
   318 
       
   319   val SOME (t,_) =
       
   320       rewrite_set_inst_ thy Poly_erls false [("bdv", "a")] make_polynomial_in t;
       
   321   UnparseC.term t;
       
   322   "x \<up> 2 + (- 1 * (b * x) + a * (b + - 1 * x)) = 0"; 
       
   323   (*da sind wir fast am Ziel: make_polynomial_in 'a' sollte ergeben
       
   324   "x \<up> 2 + (- 1 * (b * x)) + (b + - 1 * x) * a = 0"*)
       
   325 
       
   326   (*das rewriting l"asst sich beobachten mit
       
   327 Rewrite.trace_on := false; (*true false*)
       
   328   *)
       
   329 
       
   330 "------ 15.11.02 --------------------------";
       
   331   val t = (Thm.term_of o the o (TermC.parse thy)) "1 + a * x + b * x";
       
   332   val bdv = (Thm.term_of o the o (TermC.parse thy)) "bdv";
       
   333   val a = (Thm.term_of o the o (TermC.parse thy)) "a";
       
   334  
       
   335 Rewrite.trace_on := false; (*true false*)
       
   336  (* Anwenden einer Regelmenge aus Termorder.ML: *)
       
   337  val SOME (t,_) =
       
   338      rewrite_set_inst_ thy false [(bdv,a)] make_polynomial_in t;
       
   339  UnparseC.term t;
       
   340  val SOME (t,_) =
       
   341      rewrite_set_ thy false discard_parentheses t;
       
   342  UnparseC.term t;
       
   343 "1 + b * x + x * a";
       
   344 
       
   345  val t = (Thm.term_of o the o (TermC.parse thy)) "1 + a * (x + b * x) + a \<up> 2";
       
   346  val SOME (t,_) =
       
   347      rewrite_set_inst_ thy false [(bdv,a)] make_polynomial_in t;
       
   348  UnparseC.term t;
       
   349  val SOME (t,_) =
       
   350      rewrite_set_ thy false discard_parentheses t;
       
   351  UnparseC.term t;
       
   352 "1 + (x + b * x) * a + a \<up> 2";
       
   353 
       
   354  val t = (Thm.term_of o the o (TermC.parse thy)) "1 + a  \<up> 2 * x + b * a + 7*a \<up> 2";
       
   355  val SOME (t,_) =
       
   356      rewrite_set_inst_ thy false [(bdv,a)] make_polynomial_in t;
       
   357  UnparseC.term t;
       
   358  val SOME (t,_) =
       
   359      rewrite_set_ thy false discard_parentheses t;
       
   360  UnparseC.term t;
       
   361 "1 + b * a + (7 + x) * a \<up> 2";
       
   362 
       
   363 (* MG2003
       
   364  Prog_Expr.thy       grundlegende Algebra
       
   365  Poly.thy         Polynome
       
   366  Rational.thy     Br"uche
       
   367  Root.thy         Wurzeln
       
   368  RootRat.thy      Wurzen + Br"uche
       
   369  Termorder.thy    BITTE NUR HIERHER SCHREIBEN (...WN03)
       
   370 
       
   371  get_thm Termorder.thy "bdv_n_collect";
       
   372  get_thm (theory "Isac_Knowledge") "bdv_n_collect";
       
   373 *)
       
   374  val t = (Thm.term_of o the o (TermC.parse thy)) "a  \<up> 2 * x + 7 * a \<up> 2";
       
   375  val SOME (t,_) =
       
   376      rewrite_set_inst_ thy false [(bdv,a)] make_polynomial_in t;
       
   377  UnparseC.term t;
       
   378  val SOME (t,_) =
       
   379      rewrite_set_ thy false discard_parentheses t;
       
   380  UnparseC.term t;
       
   381 "(7 + x) * a \<up> 2";
       
   382 
       
   383  val t = (Thm.term_of o the o (TermC.parse Termorder.thy)) "Pi";
       
   384 
       
   385  val t = (Thm.term_of o the o (parseold thy)) "7";
       
   386 ##################################################################################*)
       
   387 
       
   388 
       
   389 \<close> ML \<open>
       
   390 "----------- open local of fun ord_make_polynomial_in ------------------------------------------";
       
   391 "----------- open local of fun ord_make_polynomial_in ------------------------------------------";
       
   392 "----------- open local of fun ord_make_polynomial_in ------------------------------------------";
       
   393 (* termorder hacked by MG, adapted later by WN *)
       
   394 (** )local ( *. for make_polynomial_in .*)
       
   395 
       
   396 open Term;  (* for type order = EQUAL | LESS | GREATER *)
       
   397 
       
   398 fun pr_ord EQUAL = "EQUAL"
       
   399   | pr_ord LESS  = "LESS"
       
   400   | pr_ord GREATER = "GREATER";
       
   401 
       
   402 fun dest_hd' _ (Const (a, T)) = (((a, 0), T), 0)
       
   403   | dest_hd' x (t as Free (a, T)) =
       
   404     if x = t then ((("|||||||||||||", 0), T), 0)                        (*WN*)
       
   405     else (((a, 0), T), 1)
       
   406   | dest_hd' _ (Var v) = (v, 2)
       
   407   | dest_hd' _ (Bound i) = ((("", i), dummyT), 3)
       
   408   | dest_hd' _ (Abs (_, T, _)) = ((("", 0), T), 4)
       
   409   | dest_hd' _ _ = raise ERROR "dest_hd': uncovered case in fun.def.";
       
   410 
       
   411 fun size_of_term' i pr x (t as Const (\<^const_name>\<open>realpow\<close>, _) $ 
       
   412       Free (var, _) $ Free (pot, _)) =
       
   413     (if pr then tracing (idt "#" i ^ "size_of_term' realpow: " ^ UnparseC.term t) else ();
       
   414     case x of                                                          (*WN*)
       
   415 	    (Free (xstr, _)) => 
       
   416 		    if xstr = var 
       
   417         then (if pr then tracing (idt "#" i ^ "xstr = var --> " ^ string_of_int (1000 * (the (TermC.int_opt_of_string pot)))) else ();
       
   418           1000 * (the (TermC.int_opt_of_string pot)))
       
   419         else (if pr then tracing (idt "#" i ^ "x <> Free  --> " ^ "3") else (); 3)
       
   420 	  | _ => raise ERROR ("size_of_term' called with subst = " ^ UnparseC.term x))
       
   421   | size_of_term' i pr x (t as Abs (_, _, body)) =
       
   422     (if pr then tracing (idt "#" i ^ "size_of_term' Abs: " ^ UnparseC.term t) else ();
       
   423     1 + size_of_term' (i + 1) pr x body)
       
   424   | size_of_term' i pr x (f $ t) =
       
   425     let
       
   426       val _ = if pr then tracing (idt "#" i ^ "size_of_term' $$$: " ^ UnparseC.term f ^ " $$$ " ^ UnparseC.term t) else ();
       
   427       val s1 = size_of_term' (i + 1) pr x f
       
   428       val s2 = size_of_term' (i + 1) pr x t
       
   429       val _ = if pr then tracing (idt "#" i ^ "size_of_term' $$$-->: " ^ string_of_int s1 ^ " + " ^ string_of_int s2 ^ " = " ^ string_of_int(s1 + s2)) else ();
       
   430     in (s1 + s2) end
       
   431   | size_of_term' i pr x t =
       
   432     (if pr then tracing (idt "#" i ^ "size_of_term' bot: " ^ UnparseC.term t) else ();
       
   433     case t of
       
   434       Free (subst, _) => 
       
   435        (case x of
       
   436    	     Free (xstr, _) =>
       
   437             if xstr = subst
       
   438             then (if pr then tracing (idt "#" i ^ "xstr = var --> " ^ "1000") else (); 1000)
       
   439             else (if pr then tracing (idt "#" i ^ "x <> Free  --> " ^ "1") else (); 1)
       
   440    	   | _ => raise ERROR ("size_of_term' called with subst = " ^ UnparseC.term x))
       
   441      | _ => (if pr then tracing (idt "#" i ^ "bot        --> " ^ "1") else (); 1));
       
   442 
       
   443 fun term_ord' i pr x thy (Abs (_, T, t), Abs(_, U, u)) =       (* ~ term.ML *)
       
   444     let
       
   445       val _ = if pr then tracing (idt "#" i ^ "term_ord' Abs") else ();
       
   446       val ord =
       
   447         case term_ord' (i + 1) pr x thy (t, u) of EQUAL => Term_Ord.typ_ord (T, U) | ord => ord
       
   448       val _  = if pr then tracing (idt "#" i ^ "term_ord' Abs --> " ^ pr_ord ord) else ()
       
   449     in ord end
       
   450   | term_ord' i pr x _ (t, u) =
       
   451     let
       
   452       val _ = if pr then tracing (idt "#" i ^ "term_ord' bot (" ^ UnparseC.term t ^ ", " ^ UnparseC.term u ^ ")") else ();
       
   453       val ord =
       
   454     	  case int_ord (size_of_term' (i + 1) pr x t, size_of_term' (i + 1) pr x u) of
       
   455     	    EQUAL =>
       
   456     	      let val (f, ts) = strip_comb t and (g, us) = strip_comb u 
       
   457             in
       
   458     	        (case hd_ord (i + 1) pr x (f, g) of 
       
   459     	           EQUAL => (terms_ord x (i + 1) pr) (ts, us) 
       
   460     	         | ord => ord)
       
   461     	      end
       
   462     	  | ord => ord
       
   463       val _  = if pr then tracing (idt "#" i ^ "term_ord' bot --> " ^ pr_ord ord) else ()
       
   464     in ord end
       
   465 and hd_ord i pr x (f, g) =                                        (* ~ term.ML *)
       
   466     let
       
   467       val _ = if pr then tracing (idt "#" i ^ "hd_ord (" ^ UnparseC.term f ^ ", " ^ UnparseC.term g ^ ")") else ();
       
   468       val ord = prod_ord
       
   469         (prod_ord Term_Ord.indexname_ord Term_Ord.typ_ord) int_ord
       
   470           (dest_hd' x f, dest_hd' x g)
       
   471       val _ = if pr then tracing (idt "#" i ^ "hd_ord --> " ^ pr_ord ord) else ();
       
   472     in ord end
       
   473 and terms_ord x i pr (ts, us) = 
       
   474     let
       
   475       val _ = if pr then tracing (idt "#" i ^ "terms_ord (" ^ UnparseC.terms ts ^ ", " ^ UnparseC.terms us ^ ")") else ();
       
   476       val ord = list_ord (term_ord' (i + 1) pr x (ThyC.get_theory "Isac_Knowledge"))(ts, us);
       
   477       val _ = if pr then tracing (idt "#" i ^ "terms_ord --> " ^ pr_ord ord) else ();
       
   478     in ord end
       
   479 
       
   480 (** )in( *local*)
       
   481 
       
   482 fun ord_make_polynomial_in (pr:bool) thy subst (ts, us) =
       
   483   ((** )tracing ("*** subs variable is: " ^ Env.subst2str subst); ( **)
       
   484 	case subst of
       
   485 	  (_, x) :: _ =>
       
   486       term_ord' 1 pr x thy (TermC.numerals_to_Free ts, TermC.numerals_to_Free us) = LESS
       
   487 	| _ => raise ERROR ("ord_make_polynomial_in called with subst = " ^ Env.subst2str subst))
       
   488 
       
   489 (** )end;( *local*)
       
   490 
       
   491 val subs = [(TermC.str2term "bdv::real", TermC.str2term "x::real")];
       
   492 if ord_make_polynomial_in false(*true*) @{theory} subs (t1, t2) then ()  else error "still GREATER?";
       
   493 
       
   494 val x = TermC.str2term "x ::real";
       
   495 
       
   496 val t1 = TermC.numerals_to_Free (TermC.str2term "L * q_0 * x \<up> 2 / 4 ::real");
       
   497 if 2006 = size_of_term' 1 false(*true*) x t1 
       
   498 then () else error "size_of_term' (L * q_0 * x \<up> 2) CHANGED)";
       
   499 
       
   500 val t2 = TermC.numerals_to_Free (TermC.str2term "- 1 * (q_0 * x \<up> 3) :: real");
       
   501 if 3004 = size_of_term' 1 false(*true*) x t2
       
   502 then () else error "size_of_term' (- 1 * (q_0 * x \<up> 3)) CHANGED";
       
   503 
       
   504 
       
   505 \<close> ML \<open>
       
   506 "----------- Matthias Goldgruber 2003 trials on rewrite orders -------------------------------";
       
   507 "----------- Matthias Goldgruber 2003 trials on rewrite orders -------------------------------";
       
   508 "----------- Matthias Goldgruber 2003 trials on rewrite orders -------------------------------";
       
   509   val substa = [(TermC.empty, (Thm.term_of o the o (TermC.parse thy)) "a")];
       
   510   val substb = [(TermC.empty, (Thm.term_of o the o (TermC.parse thy)) "b")];
       
   511   val substx = [(TermC.empty, (Thm.term_of o the o (TermC.parse thy)) "x")];
       
   512 
       
   513   val x1 = (Thm.term_of o the o (TermC.parse thy)) "a + b + x";
       
   514   val x2 = (Thm.term_of o the o (TermC.parse thy)) "a + x + b";
       
   515   val x3 = (Thm.term_of o the o (TermC.parse thy)) "a + x + b";
       
   516   val x4 = (Thm.term_of o the o (TermC.parse thy)) "x + a + b";
       
   517 
       
   518 if ord_make_polynomial_in false(*true*) thy substx (x1,x2) = true(*LESS *) then ()
       
   519 else error "termorder.sml diff.behav ord_make_polynomial_in #1";
       
   520  
       
   521 if ord_make_polynomial_in false(*true*) thy substa (x1,x2) = true(*LESS *) then ()
       
   522 else error "termorder.sml diff.behav ord_make_polynomial_in #2";
       
   523 
       
   524 if ord_make_polynomial_in false(*true*) thy substb (x1,x2) = false(*GREATER*) then ()
       
   525 else error "termorder.sml diff.behav ord_make_polynomial_in #3";
       
   526 
       
   527   val aa = (Thm.term_of o the o (TermC.parse thy)) "- 1 * a * x";
       
   528   val bb = (Thm.term_of o the o (TermC.parse thy)) "x \<up> 3";
       
   529   ord_make_polynomial_in false(*true*) thy substx (aa, bb);
       
   530   true; (* => LESS *) 
       
   531   
       
   532   val aa = (Thm.term_of o the o (TermC.parse thy)) "- 1 * a * x";
       
   533   val bb = (Thm.term_of o the o (TermC.parse thy)) "x \<up> 3";
       
   534   ord_make_polynomial_in false(*true*) thy substa (aa, bb);
       
   535   false; (* => GREATER *)
       
   536 
       
   537 (* und nach dem Re-engineering der Termorders in den 'rulesets' 
       
   538    kannst Du die 'gr"osste' Variable frei w"ahlen: *)
       
   539   val bdv= TermC.str2term "bdv ::real";
       
   540   val x  = TermC.str2term "x ::real";
       
   541   val a  = TermC.str2term "a ::real";
       
   542   val b  = TermC.str2term "b ::real";
       
   543 val SOME (t',_) = rewrite_set_inst_ thy false [(bdv,a)] make_polynomial_in x2;
       
   544 if UnparseC.term t' = "b + x + a" then ()
       
   545 else error "termorder.sml diff.behav ord_make_polynomial_in #11";
       
   546 
       
   547 val NONE = rewrite_set_inst_ thy false [(bdv,b)] make_polynomial_in x2;
       
   548 
       
   549 val SOME (t',_) = rewrite_set_inst_ thy false [(bdv,x)] make_polynomial_in x2;
       
   550 if UnparseC.term t' = "a + b + x" then ()
       
   551 else error "termorder.sml diff.behav ord_make_polynomial_in #13";
       
   552 
       
   553   val ppp' = "-6 + -5*x + x \<up> 3 + - 1*x \<up> 2 + - 1*x \<up> 3 + - 14*x \<up> 2";
       
   554   val ppp  = (Thm.term_of o the o (TermC.parse thy)) ppp';
       
   555 val SOME (t', _) = rewrite_set_inst_ thy false [(bdv,x)] make_polynomial_in ppp;
       
   556 if UnparseC.term t' = "- 6 + - 5 * x + - 15 * x \<up> 2" then ()
       
   557 else error "termorder.sml diff.behav ord_make_polynomial_in #15";
       
   558 
       
   559   val ttt' = "(3*x + 5)/18 ::real";
       
   560   val ttt = (Thm.term_of o the o (TermC.parse thy)) ttt';
       
   561 val SOME (uuu,_) = rewrite_set_inst_ thy false [(bdv,x)] make_polynomial_in ttt;
       
   562 if UnparseC.term uuu = "(5 + 3 * x) / 18" then ()
       
   563 else error "termorder.sml diff.behav ord_make_polynomial_in #16a";
       
   564 
       
   565 val SOME (uuu,_) = rewrite_set_ thy false make_polynomial ttt;
       
   566 if UnparseC.term uuu = "(5 + 3 * x) / 18" then ()
       
   567 else error "termorder.sml diff.behav ord_make_polynomial_in #16b";
       
   568 
       
   569 \<close> ML \<open>
       
   570 "----------- lin.eq degree_0 -------------------------------------";
       
   571 "----------- lin.eq degree_0 -------------------------------------";
       
   572 "----------- lin.eq degree_0 -------------------------------------";
       
   573 "----- d0_false ------";
       
   574 val fmz = ["equality (1 = (0::real))", "solveFor x", "solutions L"];
       
   575 val (dI',pI',mI') = ("PolyEq",["degree_0", "polynomial", "univariate", "equation"],
       
   576                      ["PolyEq", "solve_d0_polyeq_equation"]);
       
   577 (*=== inhibit exn WN110914: declare_constraints doesnt work with ThmC.numerals_to_Free ========
       
   578 TODO: change to "equality (x + - 1*x = (0::real))"
       
   579       and search for an appropriate problem and method.
       
   580 
       
   581 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
       
   582 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   583 val (p,_,f,nxt,_,pt) = me nxt p [] pt; 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 case f of Form' (Test_Out.FormKF (~1,EdUndef,0,Nundef,"[]")) => ()
       
   589 	 | _ => error "polyeq.sml: diff.behav. in 1 = 0 -> []";
       
   590 
       
   591 "----- d0_true ------";
       
   592 val fmz = ["equality (0 = (0::real))", "solveFor x", "solutions L"];
       
   593 val (dI',pI',mI') = ("PolyEq",["degree_0", "polynomial", "univariate", "equation"],
       
   594                      ["PolyEq", "solve_d0_polyeq_equation"]);
       
   595 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
       
   596 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   597 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   598 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   599 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   600 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   601 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   602 case f of Form' (Test_Out.FormKF (~1,EdUndef,0,Nundef,"UniversalList")) => ()
       
   603 	 | _ => error "polyeq.sml: diff.behav. in 0 = 0 -> UniversalList";
       
   604 ============ inhibit exn WN110914 ============================================*)
       
   605 
       
   606 \<close> text \<open> (*=====calcul: rhs = (- 1) \<up> 2 *)
       
   607 "----------- test thm's d2_pq_formulsxx[_neg]---------------------";
       
   608 "----------- test thm's d2_pq_formulsxx[_neg]---------------------";
       
   609 "----------- test thm's d2_pq_formulsxx[_neg]---------------------";
       
   610 "----- d2_pqformula1 ------!!!!";
       
   611 val fmz = ["equality (- 1/8 + (- 1/4)*z + z \<up> 2 = (0::real))", "solveFor z", "solutions L"];
       
   612 val (dI',pI',mI') =
       
   613   ("Isac_Knowledge", ["pqFormula", "degree_2", "polynomial", "univariate", "equation"], ["no_met"]);
       
   614 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
       
   615 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   616 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   617 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   618 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   619 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   620 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   621 val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*Apply_Method ["PolyEq", "solve_d2_polyeq_pq_equation"]*)
       
   622 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   623 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   624 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   625 val (p,_,f,nxt,_,pt) = me nxt p [] pt;         
       
   626 
       
   627 (*[z = 1 / 8 + sqrt (9 / 16) / 2, z = 1 / 8 + - 1 * sqrt (9 / 16) / 2] TODO sqrt*)
       
   628 val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt =..,Check_elementwise "Assumptions")*)
       
   629 val (p,_,f,nxt,_,pt) = me nxt p [] pt;         
       
   630 val (p,_,f,nxt,_,pt) = me nxt p [] pt;         
       
   631 
       
   632 if p = ([], Res) andalso
       
   633   f2str f = "[z = 1 / 8 + sqrt (9 / 16) / 2, z = 1 / 8 + - 1 * sqrt (9 / 16) / 2]" then
       
   634     case nxt of End_Proof' => () | _ => error "(- 1/8 + (- 1/4)*z + z \<up> 2 = (0::real)) CHANGED 1"
       
   635 else error "(- 1/8 + (- 1/4)*z + z \<up> 2 = (0::real)) CHANGED 2";
       
   636 
       
   637 \<close> text \<open> (*=====calcul: rhs = (- 1) \<up> 2 *)
       
   638 "----------- equality (2 +(- 1)*x + x \<up> 2 = (0::real)) ----------------------------------------";
       
   639 "----------- equality (2 +(- 1)*x + x \<up> 2 = (0::real)) ----------------------------------------";
       
   640 "----------- equality (2 +(- 1)*x + x \<up> 2 = (0::real)) ----------------------------------------";
       
   641 "----- d2_pqformula1_neg ------";
       
   642 val fmz = ["equality (2 +(- 1)*x + x \<up> 2 = (0::real))", "solveFor x", "solutions L"];
       
   643 val (dI',pI',mI') = ("PolyEq",["pqFormula", "degree_2", "polynomial", "univariate", "equation"], ["PolyEq", "solve_d2_polyeq_pq_equation"]);
       
   644 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
       
   645 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; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   649 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   650 (*### or2list False
       
   651   ([1],Res)  False   Or_to_List)*)
       
   652 val (p,_,f,nxt,_,pt) = me nxt p [] pt; 
       
   653 (*### or2list False                           
       
   654   ([2],Res)  []      Check_elementwise "Assumptions"*)
       
   655 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   656 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   657 val asm = Ctree.get_assumptions pt p;
       
   658 if f2str f = "[]" andalso 
       
   659   UnparseC.terms asm = "[\"lhs (2 + - 1 * x + x \<up> 2 = 0) is_poly_in x\", " ^
       
   660     "\"lhs (2 + - 1 * x + x \<up> 2 = 0) has_degree_in x = 2\"]" then ()
       
   661 else error "polyeq.sml: diff.behav. in 2 +(- 1)*x + x \<up> 2 = 0";
       
   662 
       
   663 \<close> text \<open> (*=====calcul: rhs = (- 1) \<up> 2 *)
       
   664 "----------- equality (- 2 +(- 1)*x + 1*x \<up> 2 = 0) ---------------------------------------------";
       
   665 "----------- equality (- 2 +(- 1)*x + 1*x \<up> 2 = 0) ---------------------------------------------";
       
   666 "----------- equality (- 2 +(- 1)*x + 1*x \<up> 2 = 0) ---------------------------------------------";
       
   667 "----- d2_pqformula2 ------";
       
   668 val fmz = ["equality (- 2 +(- 1)*x + 1*x \<up> 2 = 0)", "solveFor x", "solutions L"];
       
   669 val (dI',pI',mI') = ("PolyEq",["pqFormula", "degree_2", "polynomial", "univariate", "equation"],
       
   670                      ["PolyEq", "solve_d2_polyeq_pq_equation"]);
       
   671 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
       
   672 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   673 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   674 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   675 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   676 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   677 
       
   678 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   679 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   680 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   681 case f of Test_Out.FormKF "[x = 2, x = - 1]" => ()
       
   682 	 | _ => error "polyeq.sml: diff.behav. in - 2 + (- 1)*x + x^2 = 0 -> [x = 2, x = - 1]";
       
   683 
       
   684 
       
   685 \<close> ML \<open>
       
   686 "----------- equality (- 2 + x + x \<up> 2 = 0) ---------------------------------------------------";
       
   687 "----------- equality (- 2 + x + x \<up> 2 = 0) ---------------------------------------------------";
       
   688 "----------- equality (- 2 + x + x \<up> 2 = 0) ---------------------------------------------------";
       
   689 "----- d2_pqformula3 ------";
       
   690 (*EP-9*)
       
   691 val fmz = ["equality (- 2 + x + x \<up> 2 = 0)", "solveFor x", "solutions L"];
       
   692 val (dI',pI',mI') = ("PolyEq",["pqFormula", "degree_2", "polynomial", "univariate", "equation"],
       
   693                      ["PolyEq", "solve_d2_polyeq_pq_equation"]);
       
   694 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
       
   695 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   696 val (p,_,f,nxt,_,pt) = me nxt p [] pt; 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 
       
   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 val (p,_,f,nxt,_,pt) = me nxt p [] pt; 
       
   704 case f of Test_Out.FormKF "[x = 1, x = - 2]" => ()
       
   705 	 | _ => error "polyeq.sml: diff.behav. in  - 2 + x + x^2 = 0-> [x = 1, x = - 2]";
       
   706 
       
   707 
       
   708 \<close> ML \<open>
       
   709 "----------- equality (2 + x + x \<up> 2 = 0) ----------------------------------------------------";
       
   710 "----------- equality (2 + x + x \<up> 2 = 0) ----------------------------------------------------";
       
   711 "----------- equality (2 + x + x \<up> 2 = 0) ----------------------------------------------------";
       
   712 "----- d2_pqformula3_neg ------";
       
   713 val fmz = ["equality (2 + x + x \<up> 2 = 0)", "solveFor x", "solutions L"];
       
   714 val (dI',pI',mI') = ("PolyEq",["pqFormula", "degree_2", "polynomial", "univariate", "equation"],
       
   715                      ["PolyEq", "solve_d2_polyeq_pq_equation"]);
       
   716 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
       
   717 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 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   721 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   722 
       
   723 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   724 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   725 "TODO 2 + x + x \<up> 2 = 0";
       
   726 "TODO 2 + x + x \<up> 2 = 0";
       
   727 "TODO 2 + x + x \<up> 2 = 0";
       
   728 
       
   729 \<close> ML \<open>
       
   730 "----------- equality (- 2 + x + 1*x \<up> 2 = 0)) ------------------------------------------------";
       
   731 "----------- equality (- 2 + x + 1*x \<up> 2 = 0)) ------------------------------------------------";
       
   732 "----------- equality (- 2 + x + 1*x \<up> 2 = 0)) ------------------------------------------------";
       
   733 "----- d2_pqformula4 ------";
       
   734 val fmz = ["equality (- 2 + x + 1*x \<up> 2 = 0)", "solveFor x", "solutions L"];
       
   735 val (dI',pI',mI') = ("PolyEq",["pqFormula", "degree_2", "polynomial", "univariate", "equation"],
       
   736                      ["PolyEq", "solve_d2_polyeq_pq_equation"]);
       
   737 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
       
   738 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 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   741 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   742 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   743 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   744 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   745 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   746 case f of Test_Out.FormKF "[x = 1, x = - 2]" => ()
       
   747 	 | _ => error "polyeq.sml: diff.behav. in  - 2 + x + 1*x \<up> 2 = 0 -> [x = 1, x = - 2]";
       
   748 
       
   749 \<close> ML \<open>
       
   750 "----------- equality (1*x +   x \<up> 2 = 0) ----------------------------------------------------";
       
   751 "----------- equality (1*x +   x \<up> 2 = 0) ----------------------------------------------------";
       
   752 "----------- equality (1*x +   x \<up> 2 = 0) ----------------------------------------------------";
       
   753 "----- d2_pqformula5 ------";
       
   754 val fmz = ["equality (1*x +   x \<up> 2 = 0)", "solveFor x", "solutions L"];
       
   755 val (dI',pI',mI') = ("PolyEq",["pqFormula", "degree_2", "polynomial", "univariate", "equation"],
       
   756                      ["PolyEq", "solve_d2_polyeq_pq_equation"]);
       
   757 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
       
   758 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; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   761 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   762 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   763 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   764 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   765 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   766 case f of Test_Out.FormKF "[x = 0, x = - 1]" => ()
       
   767 	 | _ => error "polyeq.sml: diff.behav. in  1*x +   x^2 = 0 -> [x = 0, x = - 1]";
       
   768 
       
   769 \<close> ML \<open>
       
   770 "----------- equality (1*x + 1*x \<up> 2 = 0) ----------------------------------------------------";
       
   771 "----------- equality (1*x + 1*x \<up> 2 = 0) ----------------------------------------------------";
       
   772 "----------- equality (1*x + 1*x \<up> 2 = 0) ----------------------------------------------------";
       
   773 "----- d2_pqformula6 ------";
       
   774 val fmz = ["equality (1*x + 1*x \<up> 2 = 0)", "solveFor x", "solutions L"];
       
   775 val (dI',pI',mI') = ("PolyEq",["pqFormula", "degree_2", "polynomial", "univariate", "equation"],
       
   776                      ["PolyEq", "solve_d2_polyeq_pq_equation"]);
       
   777 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
       
   778 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   779 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   780 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   781 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   782 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   783 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   784 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   785 val (p,_,f,nxt,_,pt) = me nxt p [] pt; 
       
   786 case f of Test_Out.FormKF "[x = 0, x = - 1]" => ()
       
   787 	 | _ => error "polyeq.sml: diff.behav. in  1*x + 1*x^2 = 0 -> [x = 0, x = - 1]";
       
   788 
       
   789 \<close> ML \<open> (*=====calcul: rhs = (1::?'a) - (0::?'a) *)
       
   790 "----------- equality (x +   x \<up> 2 = 0) ------------------------------------------------------";
       
   791 "----------- equality (x +   x \<up> 2 = 0) ------------------------------------------------------";
       
   792 "----------- equality (x +   x \<up> 2 = 0) ------------------------------------------------------";
       
   793 "----- d2_pqformula7 ------";
       
   794 (*EP- 10*)
       
   795 val fmz = ["equality (  x +   x \<up> 2 = (0::real))", "solveFor x", "solutions L"];
       
   796 val (dI',pI',mI') = ("PolyEq",["pqFormula", "degree_2", "polynomial", "univariate", "equation"],
       
   797                      ["PolyEq", "solve_d2_polyeq_pq_equation"]);
       
   798 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
       
   799 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   800 val (p,_,f,nxt,_,pt) = me nxt p [] pt; 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; 
       
   804 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 val (p,_,f,nxt,_,pt) = me nxt p [] pt; 
       
   808 case f of Test_Out.FormKF "[x = 0, x = - 1]" => ()
       
   809 	 | _ => error "polyeq.sml: diff.behav. in  x + x^2 = 0 -> [x = 0, x = - 1]";
       
   810 
       
   811 
       
   812 \<close> ML \<open> (*=====calcul: rhs = (1::?'b) - (0::?'b) *)
       
   813 "----------- equality (x + 1*x \<up> 2 = 0) ------------------------------------------------------";
       
   814 "----------- equality (x + 1*x \<up> 2 = 0) ------------------------------------------------------";
       
   815 "----------- equality (x + 1*x \<up> 2 = 0) ------------------------------------------------------";
       
   816 "----- d2_pqformula8 ------";
       
   817 val fmz = ["equality (x + 1*x \<up> 2 = 0)", "solveFor x", "solutions L"];
       
   818 val (dI',pI',mI') = ("PolyEq",["pqFormula", "degree_2", "polynomial", "univariate", "equation"],
       
   819                      ["PolyEq", "solve_d2_polyeq_pq_equation"]);
       
   820 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
       
   821 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   822 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   823 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   824 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   825 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   826 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   827 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   828 val (p,_,f,nxt,_,pt) = me nxt p [] pt; 
       
   829 case f of Test_Out.FormKF "[x = 0, x = - 1]" => ()
       
   830 	 | _ => error "polyeq.sml: diff.behav. in  x + 1*x^2 = 0 -> [x = 0, x = - 1]";
       
   831 
       
   832 \<close> ML \<open>
       
   833 "----------- equality (-4 + x \<up> 2 = 0) -------------------------------------------------------";
       
   834 "----------- equality (-4 + x \<up> 2 = 0) -------------------------------------------------------";
       
   835 "----------- equality (-4 + x \<up> 2 = 0) -------------------------------------------------------";
       
   836 "----- d2_pqformula9 ------";
       
   837 val fmz = ["equality (-4 + x \<up> 2 = 0)", "solveFor x", "solutions L"];
       
   838 val (dI',pI',mI') = ("PolyEq",["pqFormula", "degree_2", "polynomial", "univariate", "equation"],
       
   839                      ["PolyEq", "solve_d2_polyeq_pq_equation"]);
       
   840 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
       
   841 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   842 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   843 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   844 val (p,_,f,nxt,_,pt) = me nxt p [] pt; 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 case f of Test_Out.FormKF "[x = 2, x = - 2]" => ()
       
   849 	 | _ => error "polyeq.sml: diff.behav. in -4 + x^2 = 0 -> [x = 2, x = - 2]";
       
   850 
       
   851 
       
   852 \<close> ML \<open>
       
   853 "----------- equality (4 + 1*x \<up> 2 = 0) -------------------------------------------------------";
       
   854 "----------- equality (4 + 1*x \<up> 2 = 0) -------------------------------------------------------";
       
   855 "----------- equality (4 + 1*x \<up> 2 = 0) -------------------------------------------------------";
       
   856 "----- d2_pqformula9_neg ------";
       
   857 val fmz = ["equality (4 + 1*x \<up> 2 = 0)", "solveFor x", "solutions L"];
       
   858 val (dI',pI',mI') = ("PolyEq",["pqFormula", "degree_2", "polynomial", "univariate", "equation"],
       
   859                      ["PolyEq", "solve_d2_polyeq_pq_equation"]);
       
   860 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
       
   861 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 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   866 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   867 "TODO 4 + 1*x \<up> 2 = 0";
       
   868 "TODO 4 + 1*x \<up> 2 = 0";
       
   869 "TODO 4 + 1*x \<up> 2 = 0";
       
   870 
       
   871 \<close> text \<open> (*=====calcul: rhs = (- 1) \<up> 2 *)
       
   872 "-------------------- test thm's d2_abc_formulsxx[_neg]-----";
       
   873 "-------------------- test thm's d2_abc_formulsxx[_neg]-----";
       
   874 "-------------------- test thm's d2_abc_formulsxx[_neg]-----";
       
   875 val fmz = ["equality (- 1 +(- 1)*x + 2*x \<up> 2 = 0)", "solveFor x", "solutions L"];
       
   876 val (dI',pI',mI') = ("PolyEq",["abcFormula", "degree_2", "polynomial", "univariate", "equation"],
       
   877                      ["PolyEq", "solve_d2_polyeq_abc_equation"]);
       
   878 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
       
   879 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   880 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   881 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   882 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   883 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   884 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   885 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   886 case f of Test_Out.FormKF "[x = 1, x = - 1 / 2]" => ()
       
   887 	 | _ => error "polyeq.sml: diff.behav. in - 1 + (- 1)*x + 2*x^2 = 0 -> [x = 1, x = - 1/2]";
       
   888 
       
   889 \<close> text \<open> (*=====calcul: rhs = (- 1) \<up> 2 *)
       
   890 "----------- equality (1 +(- 1)*x + 2*x \<up> 2 = 0) ----------------------------------------------";
       
   891 "----------- equality (1 +(- 1)*x + 2*x \<up> 2 = 0) ----------------------------------------------";
       
   892 "----------- equality (1 +(- 1)*x + 2*x \<up> 2 = 0) ----------------------------------------------";
       
   893 val fmz = ["equality (1 +(- 1)*x + 2*x \<up> 2 = 0)", "solveFor x", "solutions L"];
       
   894 val (dI',pI',mI') = ("PolyEq",["abcFormula", "degree_2", "polynomial", "univariate", "equation"],
       
   895                      ["PolyEq", "solve_d2_polyeq_abc_equation"]);
       
   896 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
       
   897 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   898 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   899 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   900 
       
   901 val (p,_,f,nxt,_,pt) = me nxt p [] pt; 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 "TODO 1 +(- 1)*x + 2*x \<up> 2 = 0";
       
   905 "TODO 1 +(- 1)*x + 2*x \<up> 2 = 0";
       
   906 "TODO 1 +(- 1)*x + 2*x \<up> 2 = 0";
       
   907 
       
   908 
       
   909 \<close> ML \<open>
       
   910 "----------- equality (- 1 + x + 2*x \<up> 2 = 0) -------------------------------------------------";
       
   911 "----------- equality (- 1 + x + 2*x \<up> 2 = 0) -------------------------------------------------";
       
   912 "----------- equality (- 1 + x + 2*x \<up> 2 = 0) -------------------------------------------------";
       
   913 (*EP- 11*)
       
   914 val fmz = ["equality (- 1 + x + 2*x \<up> 2 = 0)", "solveFor x", "solutions L"];
       
   915 val (dI',pI',mI') = ("PolyEq",["abcFormula", "degree_2", "polynomial", "univariate", "equation"],
       
   916                      ["PolyEq", "solve_d2_polyeq_abc_equation"]);
       
   917 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
       
   918 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 
       
   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 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   924 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   925 
       
   926 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   927 case f of Test_Out.FormKF "[x = 1 / 2, x = - 1]" => ()
       
   928 	 | _ => error "polyeq.sml: diff.behav. in - 1 + x + 2*x^2 = 0 -> [x = 1/2, x = - 1]";
       
   929 
       
   930 
       
   931 \<close> text \<open> (*=====calcul: rhs = (1::?'c) - (0::?'c) *)
       
   932 "----------- equality (1 + x + 2*x \<up> 2 = 0) --------------------------------------------------";
       
   933 "----------- equality (1 + x + 2*x \<up> 2 = 0) --------------------------------------------------";
       
   934 "----------- equality (1 + x + 2*x \<up> 2 = 0) --------------------------------------------------";
       
   935 val fmz = ["equality (1 + x + 2*x \<up> 2 = 0)", "solveFor x", "solutions L"];
       
   936 val (dI',pI',mI') = ("PolyEq",["abcFormula", "degree_2", "polynomial", "univariate", "equation"],
       
   937                      ["PolyEq", "solve_d2_polyeq_abc_equation"]);
       
   938 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
       
   939 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   940 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   941 
       
   942 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   943 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   944 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   945 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   946 val (p,_,f,nxt,_,pt) = me nxt p [] pt; 
       
   947 "TODO 1 + x + 2*x \<up> 2 = 0";
       
   948 "TODO 1 + x + 2*x \<up> 2 = 0";
       
   949 "TODO 1 + x + 2*x \<up> 2 = 0";
       
   950 
       
   951 
       
   952 val fmz = ["equality (- 2 + 1*x + x \<up> 2 = 0)", "solveFor x", "solutions L"];
       
   953 val (dI',pI',mI') = ("PolyEq",["abcFormula", "degree_2", "polynomial", "univariate", "equation"],
       
   954                      ["PolyEq", "solve_d2_polyeq_abc_equation"]);
       
   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 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   960 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   961 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   962 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   963 case f of Test_Out.FormKF "[x = 1, x = - 2]" => ()
       
   964 	 | _ => error "polyeq.sml: diff.behav. in - 2 + 1*x + x^2 = 0 -> [x = 1, x = - 2]";
       
   965 
       
   966 val fmz = ["equality ( 2 + 1*x + x \<up> 2 = 0)", "solveFor x", "solutions L"];
       
   967 val (dI',pI',mI') = ("PolyEq",["abcFormula", "degree_2", "polynomial", "univariate", "equation"],
       
   968                      ["PolyEq", "solve_d2_polyeq_abc_equation"]);
       
   969 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
       
   970 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   971 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   972 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   973 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   974 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   975 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   976 val (p,_,f,nxt,_,pt) = me nxt p [] pt; 
       
   977 "TODO 2 + 1*x + x \<up> 2 = 0";
       
   978 "TODO 2 + 1*x + x \<up> 2 = 0";
       
   979 "TODO 2 + 1*x + x \<up> 2 = 0";
       
   980 
       
   981 (*EP- 12*)
       
   982 val fmz = ["equality (- 2 + x + x \<up> 2 = 0)", "solveFor x", "solutions L"];
       
   983 val (dI',pI',mI') = ("PolyEq",["abcFormula", "degree_2", "polynomial", "univariate", "equation"],
       
   984                      ["PolyEq", "solve_d2_polyeq_abc_equation"]);
       
   985 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
       
   986 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   987 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   988 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   989 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   990 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   991 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   992 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
   993 case f of Test_Out.FormKF "[x = 1, x = - 2]" => ()
       
   994 	 | _ => error "polyeq.sml: diff.behav. in - 2 + x + x^2 = 0 -> [x = 1, x = - 2]";
       
   995 
       
   996 val fmz = ["equality ( 2 + x + x \<up> 2 = 0)", "solveFor x", "solutions L"];
       
   997 val (dI',pI',mI') = ("PolyEq",["abcFormula", "degree_2", "polynomial", "univariate", "equation"],
       
   998                      ["PolyEq", "solve_d2_polyeq_abc_equation"]);
       
   999 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
       
  1000 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1001 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1002 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1003 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1004 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1005 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1006 val (p,_,f,nxt,_,pt) = me nxt p [] pt; 
       
  1007 "TODO 2 + x + x \<up> 2 = 0";
       
  1008 "TODO 2 + x + x \<up> 2 = 0";
       
  1009 "TODO 2 + x + x \<up> 2 = 0";
       
  1010 
       
  1011 (*EP- 13*)
       
  1012 val fmz = ["equality (-8 + 2*x \<up> 2 = 0)", "solveFor x", "solutions L"];
       
  1013 val (dI',pI',mI') = ("PolyEq",["abcFormula", "degree_2", "polynomial", "univariate", "equation"],
       
  1014                      ["PolyEq", "solve_d2_polyeq_abc_equation"]);
       
  1015 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
       
  1016 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1017 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1018 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1019 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1020 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1021 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1022 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1023 case f of Test_Out.FormKF "[x = 2, x = - 2]" => ()
       
  1024 	 | _ => error "polyeq.sml: diff.behav. in -8 + 2*x^2 = 0 -> [x = 2, x = - 2]";
       
  1025 
       
  1026 val fmz = ["equality ( 8+ 2*x \<up> 2 = 0)", "solveFor x", "solutions L"];
       
  1027 val (dI',pI',mI') = ("PolyEq",["abcFormula", "degree_2", "polynomial", "univariate", "equation"],
       
  1028                      ["PolyEq", "solve_d2_polyeq_abc_equation"]);
       
  1029 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
       
  1030 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1031 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1032 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1033 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1034 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1035 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1036 "TODO 8+ 2*x \<up> 2 = 0";
       
  1037 "TODO 8+ 2*x \<up> 2 = 0";
       
  1038 "TODO 8+ 2*x \<up> 2 = 0";
       
  1039 
       
  1040 (*EP- 14*)
       
  1041 val fmz = ["equality (-4 + x \<up> 2 = 0)", "solveFor x", "solutions L"];
       
  1042 val (dI',pI',mI') = ("PolyEq",["abcFormula", "degree_2", "polynomial", "univariate", "equation"], ["PolyEq", "solve_d2_polyeq_abc_equation"]);
       
  1043 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
       
  1044 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1045 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1046 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1047 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1048 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1049 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1050 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1051 case f of Test_Out.FormKF "[x = 2, x = - 2]" => ()
       
  1052 	 | _ => error "polyeq.sml: diff.behav. in -4 + x^2 = 0 -> [x = 2, x = - 2]";
       
  1053 
       
  1054 
       
  1055 val fmz = ["equality ( 4+ x \<up> 2 = 0)", "solveFor x", "solutions L"];
       
  1056 val (dI',pI',mI') = ("PolyEq",["abcFormula", "degree_2", "polynomial", "univariate", "equation"], ["PolyEq", "solve_d2_polyeq_abc_equation"]);
       
  1057 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
       
  1058 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1059 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1060 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1061 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1062 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1063 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1064 "TODO 4+ x \<up> 2 = 0";
       
  1065 "TODO 4+ x \<up> 2 = 0";
       
  1066 "TODO 4+ x \<up> 2 = 0";
       
  1067 
       
  1068 (*EP- 15*)
       
  1069 val fmz = ["equality (2*x + 2*x \<up> 2 = 0)", "solveFor x", "solutions L"];
       
  1070 val (dI',pI',mI') = ("PolyEq",["abcFormula", "degree_2", "polynomial", "univariate", "equation"],
       
  1071                      ["PolyEq", "solve_d2_polyeq_abc_equation"]);
       
  1072 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
       
  1073 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1074 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1075 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1076 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1077 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1078 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1079 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1080 case f of Test_Out.FormKF "[x = 0, x = - 1]" => ()
       
  1081 	 | _ => error "polyeq.sml: diff.behav. in x + x^2 = 0 -> [x = 0, x = - 1]";
       
  1082 
       
  1083 val fmz = ["equality (1*x + x \<up> 2 = 0)", "solveFor x", "solutions L"];
       
  1084 val (dI',pI',mI') = ("PolyEq",["abcFormula", "degree_2", "polynomial", "univariate", "equation"],
       
  1085                      ["PolyEq", "solve_d2_polyeq_abc_equation"]);
       
  1086 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
       
  1087 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1088 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1089 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1090 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1091 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1092 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1093 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1094 case f of Test_Out.FormKF "[x = 0, x = - 1]" => ()
       
  1095 	 | _ => error "polyeq.sml: diff.behav. in x + x^2 = 0 -> [x = 0, x = - 1]";
       
  1096 
       
  1097 (*EP- 16*)
       
  1098 val fmz = ["equality (x + 2 * x \<up> 2 = (0::real))", "solveFor (x::real)", "solutions L"];
       
  1099 val (dI',pI',mI') = ("PolyEq",["abcFormula", "degree_2", "polynomial", "univariate", "equation"],
       
  1100                      ["PolyEq", "solve_d2_polyeq_abc_equation"]);
       
  1101 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
       
  1102 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1103 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1104 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1105 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1106 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1107 
       
  1108 (*+*)val Test_Out.FormKF "x + 2 * x \<up> 2 = 0" = f;
       
  1109 (*+*)val Rewrite_Set_Inst (["(''bdv'', x)"], "d2_polyeq_abcFormula_simplify") = nxt
       
  1110 
       
  1111 val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*"x + 2 * x \<up> 2 = 0", d2_polyeq_abcFormula_simplify*)
       
  1112 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1113 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1114 case f of Test_Out.FormKF "[x = 0, x = - 1 / 2]" => ()
       
  1115 	 | _ => error "polyeq.sml: diff.behav. in x + x^2 = 0 -> [x = 0, x = - 1 / 2]";
       
  1116 
       
  1117 (*EP-//*)
       
  1118 val fmz = ["equality (x + x \<up> 2 = 0)", "solveFor x", "solutions L"];
       
  1119 val (dI',pI',mI') = ("PolyEq",["abcFormula", "degree_2", "polynomial", "univariate", "equation"],
       
  1120                      ["PolyEq", "solve_d2_polyeq_abc_equation"]);
       
  1121 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
       
  1122 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1123 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1124 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1125 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1126 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1127 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1128 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1129 case f of Test_Out.FormKF "[x = 0, x = - 1]" => ()
       
  1130 	 | _ => error "polyeq.sml: diff.behav. in x + x^2 = 0 -> [x = 0, x = - 1]";
       
  1131 
       
  1132 
       
  1133 \<close> ML \<open>
       
  1134 "----------- (-8 - 2*x + x \<up> 2 = 0),  (*Schalk 2, S.67 Nr.31.b----";
       
  1135 "----------- (-8 - 2*x + x \<up> 2 = 0),  (*Schalk 2, S.67 Nr.31.b----";
       
  1136 "----------- (-8 - 2*x + x \<up> 2 = 0),  (*Schalk 2, S.67 Nr.31.b----";
       
  1137 (*stopped du to TODO.txt WN111014.TODO calculate_Poly < calculate_Rational < calculate_RootRat
       
  1138 see --- val rls = calculate_RootRat > calculate_Rational ---
       
  1139 calculate_RootRat was a TODO with 2002, requires re-design.
       
  1140 see also --- (-8 - 2*x + x \<up> 2 = 0),  by rewriting --- below
       
  1141 *)
       
  1142  val fmz = ["equality (-8 - 2*x + x \<up> 2 = 0)", (*Schalk 2, S.67 Nr.31.b*)
       
  1143  	    "solveFor x", "solutions L"];
       
  1144  val (dI',pI',mI') =
       
  1145      ("PolyEq",["degree_2", "expanded", "univariate", "equation"],
       
  1146       ["PolyEq", "complete_square"]);
       
  1147 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
       
  1148 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1149 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1150 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1151 
       
  1152 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1153 (*Apply_Method ("PolyEq", "complete_square")*)
       
  1154 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1155 (*"-8 - 2 * x + x \<up> 2 = 0", nxt = Rewrite_Set_Inst ... "complete_square*)
       
  1156 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1157 (*"-8 + (2 / 2 - x) \<up> 2 = (2 / 2) \<up> 2", nxt = Rewrite("square_explicit1"*)
       
  1158 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1159 (*"(2 / 2 - x) \<up> 2 = (2 / 2) \<up> 2 - -8" nxt = Rewrite("root_plus_minus*)
       
  1160 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1161 (*"2 / 2 - x = sqrt ((2 / 2) \<up> 2 - -8) |
       
  1162    2 / 2 - x = - sqrt ((2 / 2) \<up> 2 - -8)" nxt = Rewr_Inst("bdv_explicit2"*)
       
  1163 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1164 (*"2 / 2 - x = sqrt ((2 / 2) \<up> 2 - -8) |
       
  1165    - 1*x = - (2 / 2) + - sqrt ((2 / 2) \<up> 2 - -8)"nxt = R_Inst("bdv_explt2"*)
       
  1166 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1167 (*"- 1 * x = - (2 / 2) + sqrt ((2 / 2) \<up> 2 - -8) |
       
  1168    - 1 * x = (- (2 / 2) + - sqrt ((2 / 2) \<up> 2 - -8))"nxt = bdv_explicit3*)
       
  1169 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1170 (*"- 1 * x = - (2 / 2) + sqrt ((2 / 2) \<up> 2 - -8) |
       
  1171   x = - 1 * (- (2 / 2) + - sqrt ((2 / 2) \<up> 2 - -8))" nxt = bdv_explicit3*)
       
  1172 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1173 (*"x = - 1 * (- (2 / 2) + sqrt ((2 / 2) \<up> 2 - -8)) |
       
  1174    x = - 1 * (- (2 / 2) + - sqrt ((2 / 2) \<up> 2 - -8))"nxt = calculate_Rational
       
  1175    NOT IMPLEMENTED SINCE 2002 ------------------------------ \<up> \<up> \<up> \<up> \<up>  \<up> *)
       
  1176 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1177 (*"x = - 2 | x = 4" nxt = Or_to_List*)
       
  1178 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1179 (*"[x = - 2, x = 4]" nxt = Check_Postcond*)
       
  1180 val (p,_,f,nxt,_,pt) = me nxt p [] pt; f2str f;
       
  1181 (* FIXXXME 
       
  1182  case f of Form' (Test_Out.FormKF (~1,EdUndef,0,Nundef,"[x = - 2, x = 4]")) => () TODO
       
  1183 	 | _ => error "polyeq.sml: diff.behav. in [x = - 2, x = 4]";
       
  1184 *)
       
  1185 if f2str f =
       
  1186    "[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))]"
       
  1187 (*"[x = - 1 * - 1 + - 1 * sqrt (1 \<up> 2 - -8),\n x = - 1 * - 1 + - 1 * (- 1 * sqrt (1 \<up> 2 - -8))]"*)
       
  1188 then () else error "polyeq.sml corrected?behav. in [x = - 2, x = 4]";
       
  1189 
       
  1190 
       
  1191 "----------- (-8 - 2*x + x \<up> 2 = 0),  by rewriting ---------------";
       
  1192 "----------- (-8 - 2*x + x \<up> 2 = 0),  by rewriting ---------------";
       
  1193 "----------- (-8 - 2*x + x \<up> 2 = 0),  by rewriting ---------------";
       
  1194 (*stopped due to TODO.txt WN111014.TODO calculate_Poly < calculate_Rational < calculate_RootRat
       
  1195 see --- val rls = calculate_RootRat > calculate_Rational ---*)
       
  1196 val thy = @{theory PolyEq};
       
  1197 val ctxt = Proof_Context.init_global thy;
       
  1198 val inst = [((the o (parseNEW  ctxt)) "bdv::real", (the o (parseNEW  ctxt)) "x::real")];
       
  1199 val t = (the o (parseNEW  ctxt)) "-8 - 2*x + x \<up> 2 = (0::real)";
       
  1200 
       
  1201 val rls = complete_square;
       
  1202 val SOME (t,asm) = rewrite_set_inst_ thy true inst rls t;
       
  1203 if UnparseC.term t = "- 8 + (2 / 2 - x) \<up> 2 = (2 / 2) \<up> 2"
       
  1204 then () else error "rls complete_square CHANGED";
       
  1205 
       
  1206 val thm = @{thm square_explicit1};
       
  1207 val SOME (t,asm) = rewrite_ thy dummy_ord Rule_Set.Empty true thm t;
       
  1208 if UnparseC.term t = "(2 / 2 - x) \<up> 2 = (2 / 2) \<up> 2 - - 8"
       
  1209 then () else error "thm square_explicit1 CHANGED";
       
  1210 
       
  1211 val thm = @{thm root_plus_minus};
       
  1212 val SOME (t,asm) = rewrite_ thy dummy_ord PolyEq_erls true thm t;
       
  1213 if UnparseC.term t =
       
  1214 "2 / 2 - x = sqrt ((2 / 2) \<up> 2 - - 8) \<or>\n2 / 2 - x = - 1 * sqrt ((2 / 2) \<up> 2 - - 8)"
       
  1215 then () else error "thm root_plus_minus CHANGED";
       
  1216 
       
  1217 (*the thm bdv_explicit2* here required to be constrained to ::real*)
       
  1218 val thm = @{thm bdv_explicit2};
       
  1219 val SOME (t,asm) = rewrite_inst_ thy dummy_ord Rule_Set.Empty true inst thm t;
       
  1220 if UnparseC.term t =
       
  1221 "2 / 2 - x = sqrt ((2 / 2) \<up> 2 - - 8) \<or>\n- 1 * x = - (2 / 2) + - 1 * sqrt ((2 / 2) \<up> 2 - - 8)"
       
  1222 then () else error "thm bdv_explicit2 CHANGED";
       
  1223 
       
  1224 val thm = @{thm bdv_explicit3};
       
  1225 val SOME (t,asm) = rewrite_inst_ thy dummy_ord Rule_Set.Empty true inst thm t;
       
  1226 if UnparseC.term t =
       
  1227 "2 / 2 - x = sqrt ((2 / 2) \<up> 2 - - 8) \<or>\nx = - 1 * (- (2 / 2) + - 1 * sqrt ((2 / 2) \<up> 2 - - 8))"
       
  1228 then () else error "thm bdv_explicit3 CHANGED";
       
  1229 
       
  1230 val thm = @{thm bdv_explicit2};
       
  1231 val SOME (t,asm) = rewrite_inst_ thy dummy_ord Rule_Set.Empty true inst thm t;
       
  1232 if UnparseC.term t =
       
  1233 "- 1 * x = - (2 / 2) + sqrt ((2 / 2) \<up> 2 - - 8) \<or>\nx = - 1 * (- (2 / 2) + - 1 * sqrt ((2 / 2) \<up> 2 - - 8))"
       
  1234 then () else error "thm bdv_explicit2 CHANGED";
       
  1235 
       
  1236 val rls = calculate_RootRat;
       
  1237 val SOME (t,asm) = rewrite_set_ thy true rls t;
       
  1238 if UnparseC.term t =
       
  1239   "- 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))"
       
  1240 (*"- 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*)
       
  1241 then () else error "(-8 - 2*x + x \<up> 2 = 0),  by rewriting -- ERROR INDICATES IMPROVEMENT";
       
  1242 (*SHOULD BE: UnparseC.term = "x = - 2 | x = 4;*)
       
  1243 
       
  1244 
       
  1245 "-------------------- (3 - 10*x + 3*x \<up> 2 = 0), ----------------------";
       
  1246 "-------------------- (3 - 10*x + 3*x \<up> 2 = 0), ----------------------";
       
  1247 "-------------------- (3 - 10*x + 3*x \<up> 2 = 0), ----------------------";
       
  1248 "---- test the erls ----";
       
  1249  val t1 = (Thm.term_of o the o (TermC.parse thy)) "0 <= (10/3/2) \<up> 2 - 1";
       
  1250  val SOME (t,_) = rewrite_set_ @{theory PolyEq} false PolyEq_erls t1;
       
  1251  val t' = UnparseC.term t;
       
  1252  (*if t'= \<^const_name>\<open>True\<close> then ()
       
  1253  else error "polyeq.sml: diff.behav. in 'rewrite_set_.. PolyEq_erls";*)
       
  1254 (* *)
       
  1255  val fmz = ["equality (3 - 10*x + 3*x \<up> 2 = 0)",
       
  1256  	    "solveFor x", "solutions L"];
       
  1257  val (dI',pI',mI') =
       
  1258      ("PolyEq",["degree_2", "expanded", "univariate", "equation"],
       
  1259       ["PolyEq", "complete_square"]);
       
  1260 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
       
  1261 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1262  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1263  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1264  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1265  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1266  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1267  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1268  (*Apply_Method ("PolyEq", "complete_square")*)
       
  1269  val (p,_,f,nxt,_,pt) = me nxt p [] pt; f2str f;
       
  1270 
       
  1271 "----------- (- 16 + 4*x + 2*x \<up> 2 = 0), --------------------------";
       
  1272 "----------- (- 16 + 4*x + 2*x \<up> 2 = 0), --------------------------";
       
  1273 "----------- (- 16 + 4*x + 2*x \<up> 2 = 0), --------------------------";
       
  1274  val fmz = ["equality (- 16 + 4*x + 2*x \<up> 2 = 0)",
       
  1275  	    "solveFor x", "solutions L"];
       
  1276  val (dI',pI',mI') =
       
  1277      ("PolyEq",["degree_2", "expanded", "univariate", "equation"],
       
  1278       ["PolyEq", "complete_square"]);
       
  1279 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
       
  1280 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1281  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1282  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1283  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1284  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1285  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1286  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1287  (*Apply_Method ("PolyEq", "complete_square")*)
       
  1288  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1289  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1290  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1291  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1292  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1293  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1294  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1295  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1296  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1297  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
       
  1298 (* FIXXXXME n1.,
       
  1299  case f of Form' (Test_Out.FormKF (~1,EdUndef,0,Nundef,"[x = 2, x = -4]")) => () TODO
       
  1300 	 | _ => error "polyeq.sml: diff.behav. in [x = 2, x = -4]";
       
  1301 *)
       
  1302 
       
  1303 \<close> ML \<open>
   110 \<close> ML \<open>
  1304 \<close> ML \<open>
   111 \<close> ML \<open>
  1305 \<close>
   112 \<close>
  1306 
       
  1307 
   113 
  1308 section \<open>===================================================================================\<close>
   114 section \<open>===================================================================================\<close>
  1309 ML \<open>
   115 ML \<open>
  1310 \<close> ML \<open>
   116 \<close> ML \<open>
  1311 \<close> ML \<open>
   117 \<close> ML \<open>