test/Tools/isac/Knowledge/polyeq-2.sml
changeset 60500 59a3af532717
parent 60394 41cdbf7d5e6e
child 60509 2e0b7ca391dc
equal deleted inserted replaced
60499:d2407e9cb491 60500:59a3af532717
   213 
   213 
   214 "----------- rls make_polynomial_in ------------------------------";
   214 "----------- rls make_polynomial_in ------------------------------";
   215 "----------- rls make_polynomial_in ------------------------------";
   215 "----------- rls make_polynomial_in ------------------------------";
   216 "----------- rls make_polynomial_in ------------------------------";
   216 "----------- rls make_polynomial_in ------------------------------";
   217 val thy = @{theory};
   217 val thy = @{theory};
       
   218 val ctxt = @{context};
   218 (*Punkte aus dem TestBericht, die ich in rlang.sml nicht zuordnen konnte:*)
   219 (*Punkte aus dem TestBericht, die ich in rlang.sml nicht zuordnen konnte:*)
   219 (*WN.19.3.03 ---v-*)
   220 (*WN.19.3.03 ---v-*)
   220 (*3(b)*)val (bdv,v) = (TermC.str2term "''bdv''", TermC.str2term "R1");
   221 (*3(b)*)val (bdv,v) = (TermC.str2term "''bdv''", TermC.str2term "R1");
   221 val t = TermC.str2term "- 1 * (R * R2) + R2 * R1 + - 1 * (R * R1) = 0";
   222 val t = TermC.str2term "- 1 * (R * R2) + R2 * R1 + - 1 * (R * R1) = 0";
   222 val SOME (t',_) = rewrite_set_inst_ thy false [(bdv,v)] make_polynomial_in t;
   223 val SOME (t',_) = rewrite_set_inst_ ctxt false [(bdv,v)] make_polynomial_in t;
   223 if UnparseC.term t' = "- 1 * R * R2 + R2 * R1 + - 1 * R * R1 = 0" then ()
   224 if UnparseC.term t' = "- 1 * R * R2 + R2 * R1 + - 1 * R * R1 = 0" then ()
   224 else error "make_polynomial_in (- 1 * (R * R2) + R2 * R1 + - 1 * (R * R1) = 0)";
   225 else error "make_polynomial_in (- 1 * (R * R2) + R2 * R1 + - 1 * (R * R1) = 0)";
   225 "- 1 * R * R2 + (R2 + - 1 * R) * R1 = 0";
   226 "- 1 * R * R2 + (R2 + - 1 * R) * R1 = 0";
   226 (*WN.19.3.03 ---^-*)
   227 (*WN.19.3.03 ---^-*)
   227 
   228 
   228 (*3(c)*)val (bdv,v) = (TermC.str2term "bdv", TermC.str2term "p");
   229 (*3(c)*)val (bdv,v) = (TermC.str2term "bdv", TermC.str2term "p");
   229 val t = TermC.str2term "y \<up> 2 + - 2 * (x * p) = 0";
   230 val t = TermC.str2term "y \<up> 2 + - 2 * (x * p) = 0";
   230 val SOME (t',_) = rewrite_set_inst_ thy false [(bdv,v)] make_polynomial_in t;
   231 val SOME (t',_) = rewrite_set_inst_ ctxt false [(bdv,v)] make_polynomial_in t;
   231 if UnparseC.term t' = "y \<up> 2 + - 2 * x * p = 0" then ()
   232 if UnparseC.term t' = "y \<up> 2 + - 2 * x * p = 0" then ()
   232 else error "make_polynomial_in (y \<up> 2 + - 2 * (x * p) = 0)";
   233 else error "make_polynomial_in (y \<up> 2 + - 2 * (x * p) = 0)";
   233 
   234 
   234 (*3(d)*)val (bdv,v) = (TermC.str2term "''bdv''", TermC.str2term "x2");
   235 (*3(d)*)val (bdv,v) = (TermC.str2term "''bdv''", TermC.str2term "x2");
   235 val t = TermC.str2term 
   236 val t = TermC.str2term 
   236 "A + x1 * (y3 * (1 / 2)) + x3 * (y2 * (1 / 2)) + - 1 * (x1 * (y2 * (1 / 2))) + - 1 * (x3 * (y1 * (1 / 2 ))) + y1 * (1 / 2 * x2) + - 1 * (y3 * (1 / 2 * x2)) = 0";
   237 "A + x1 * (y3 * (1 / 2)) + x3 * (y2 * (1 / 2)) + - 1 * (x1 * (y2 * (1 / 2))) + - 1 * (x3 * (y1 * (1 / 2 ))) + y1 * (1 / 2 * x2) + - 1 * (y3 * (1 / 2 * x2)) = 0";
   237 val SOME (t',_) = rewrite_set_inst_ thy false [(bdv,v)] make_polynomial_in t;
   238 val SOME (t',_) = rewrite_set_inst_ ctxt false [(bdv,v)] make_polynomial_in t;
   238 if UnparseC.term t' =
   239 if UnparseC.term t' =
   239 "A + x1 * y3 * (1 / 2) + x3 * y2 * (1 / 2) + - 1 * x1 * y2 * (1 / 2) +\n- 1 * x3 * y1 * (1 / 2) +\ny1 * (1 / 2) * x2 +\n- 1 * y3 * (1 / 2) * x2 =\n0"
   240 "A + x1 * y3 * (1 / 2) + x3 * y2 * (1 / 2) + - 1 * x1 * y2 * (1 / 2) +\n- 1 * x3 * y1 * (1 / 2) +\ny1 * (1 / 2) * x2 +\n- 1 * y3 * (1 / 2) * x2 =\n0"
   240 then ()
   241 then ()
   241 else error "make_polynomial_in (A + x1 * (y3 * (1 / 2)) + x3 * (y2 * (1 / 2)) + - 1...";
   242 else error "make_polynomial_in (A + x1 * (y3 * (1 / 2)) + x3 * (y2 * (1 / 2)) + - 1...";
   242 "A + x1 * y3 * (1 / 2) + x3 * y2 * (1 / 2) + - x1 * y2 * (1 / 2) + - x3 * y1 * (1 / 2) + (y1 * (1 / 2) + - y3 * (1 / 2)) * x2 = 0";
   243 "A + x1 * y3 * (1 / 2) + x3 * y2 * (1 / 2) + - x1 * y2 * (1 / 2) + - x3 * y1 * (1 / 2) + (y1 * (1 / 2) + - y3 * (1 / 2)) * x2 = 0";
   243 
   244 
   244 val SOME (t',_) = rewrite_set_inst_ thy false [(bdv,v)] make_ratpoly_in t;
   245 val SOME (t',_) = rewrite_set_inst_ ctxt false [(bdv,v)] make_ratpoly_in t;
   245 if UnparseC.term t' = 
   246 if UnparseC.term t' = 
   246 "A / 1 + x1 * y3 / 2 + x3 * y2 / 2 + - 1 * x1 * y2 / 2 + - 1 * x3 * y1 / 2 +\ny1 * x2 / 2 +\n- 1 * y3 * x2 / 2 =\n0"
   247 "A / 1 + x1 * y3 / 2 + x3 * y2 / 2 + - 1 * x1 * y2 / 2 + - 1 * x3 * y1 / 2 +\ny1 * x2 / 2 +\n- 1 * y3 * x2 / 2 =\n0"
   247 then ()
   248 then ()
   248 else error "make_ratpoly_in (A + x1 * (y3 * (1 / 2)) + x3 * (y2 * (1 / 2)) + - 1...";
   249 else error "make_ratpoly_in (A + x1 * (y3 * (1 / 2)) + x3 * (y2 * (1 / 2)) + - 1...";
   249 "A + x1 * y3 * (1 / 2) + x3 * y2 * (1 / 2) + - 1 * x1 * y2 * (1 / 2) + - 1 * x3 * y1 * (1 / 2) + (y1 * (1 / 2) + - 1 * y3 * (1 / 2)) * x2 = 0";
   250 "A + x1 * y3 * (1 / 2) + x3 * y2 * (1 / 2) + - 1 * x1 * y2 * (1 / 2) + - 1 * x3 * y1 * (1 / 2) + (y1 * (1 / 2) + - 1 * y3 * (1 / 2)) * x2 = 0";
   250 
   251 
   251 (*3(e)*)val (bdv,v) = (TermC.str2term "bdv", TermC.str2term "a");
   252 (*3(e)*)val (bdv,v) = (TermC.str2term "bdv", TermC.str2term "a");
   252 val t = TermC.str2term 
   253 val t = TermC.str2term 
   253 "A \<up> 2 + c \<up> 2 * (c / d) \<up> 2 + (-4 * (c / d) \<up> 2) * a \<up> 2 = 0";
   254 "A \<up> 2 + c \<up> 2 * (c / d) \<up> 2 + (-4 * (c / d) \<up> 2) * a \<up> 2 = 0";
   254 val NONE = rewrite_set_inst_ thy false [(bdv,v)] make_polynomial_in t;
   255 val NONE = rewrite_set_inst_ ctxt false [(bdv,v)] make_polynomial_in t;
   255 (* the invisible parentheses are as expected *)
   256 (* the invisible parentheses are as expected *)
   256 
   257 
   257 val t = TermC.str2term "(x + 1) * (x + 2) - (3 * x - 2) \<up> 2 - ((2 * x - 1) \<up> 2 + (3 * x - 1) * (x + 1)) = 0";
   258 val t = TermC.str2term "(x + 1) * (x + 2) - (3 * x - 2) \<up> 2 - ((2 * x - 1) \<up> 2 + (3 * x - 1) * (x + 1)) = 0";
   258 Rewrite.trace_on:= false; (*true false*)
   259 rewrite_set_ ctxt false expand_binoms t;
   259 rewrite_set_ thy false expand_binoms t;
       
   260 Rewrite.trace_on:=false; (*true false*)
       
   261 
   260 
   262 
   261 
   263 "----------- interSteps ([1],Res); on Schalk Is86Bsp5-------------";
   262 "----------- interSteps ([1],Res); on Schalk Is86Bsp5-------------";
   264 "----------- interSteps ([1],Res); on Schalk Is86Bsp5-------------";
   263 "----------- interSteps ([1],Res); on Schalk Is86Bsp5-------------";
   265 "----------- interSteps ([1],Res); on Schalk Is86Bsp5-------------";
   264 "----------- interSteps ([1],Res); on Schalk Is86Bsp5-------------";
   279 "----------- rls d2_polyeq_bdv_only_simplify ---------------------";
   278 "----------- rls d2_polyeq_bdv_only_simplify ---------------------";
   280 "----------- rls d2_polyeq_bdv_only_simplify ---------------------";
   279 "----------- rls d2_polyeq_bdv_only_simplify ---------------------";
   281 "----------- rls d2_polyeq_bdv_only_simplify ---------------------";
   280 "----------- rls d2_polyeq_bdv_only_simplify ---------------------";
   282 val t = TermC.str2term "-6 * x + 5 * x \<up> 2 = (0::real)";
   281 val t = TermC.str2term "-6 * x + 5 * x \<up> 2 = (0::real)";
   283 val subst = [(TermC.str2term "(bdv::real)", TermC.str2term "(x::real)")];
   282 val subst = [(TermC.str2term "(bdv::real)", TermC.str2term "(x::real)")];
   284 val SOME (t''''', _) = rewrite_set_inst_ thy true subst d2_polyeq_bdv_only_simplify t;
   283 val SOME (t''''', _) = rewrite_set_inst_ ctxt true subst d2_polyeq_bdv_only_simplify t;
   285 (* steps in rls d2_polyeq_bdv_only_simplify:*)
   284 (* steps in rls d2_polyeq_bdv_only_simplify:*)
   286 
   285 
   287 (*-6 * x + 5 * x ^ 2 = 0 : Rewrite_Inst (["(''bdv'',x)"],("d2_prescind1", "")) --> x * (-6 + 5 * x) = 0*)
   286 (*-6 * x + 5 * x ^ 2 = 0 : Rewrite_Inst (["(''bdv'',x)"],("d2_prescind1", "")) --> x * (-6 + 5 * x) = 0*)
   288 t |> UnparseC.term; t |> TermC.atomty;
   287 t |> UnparseC.term; t |> TermC.atomty;
   289 val thm = @{thm d2_prescind1};
   288 val thm = @{thm d2_prescind1};
   290 thm |> Thm.prop_of |> UnparseC.term; thm |> Thm.prop_of |> TermC.atomty;
   289 thm |> Thm.prop_of |> UnparseC.term; thm |> Thm.prop_of |> TermC.atomty;
   291 val SOME (t', _) = rewrite_inst_ thy e_rew_ord Rule_Set.empty true subst thm t; UnparseC.term t';
   290 val SOME (t', _) = rewrite_inst_ ctxt e_rew_ord Rule_Set.empty true subst thm t; UnparseC.term t';
   292 
   291 
   293 (*x * (-6 + 5 * x) = 0   : Rewrite_Inst (["(''bdv'',x)"],("d2_reduce_equation1", "")) 
   292 (*x * (-6 + 5 * x) = 0   : Rewrite_Inst (["(''bdv'',x)"],("d2_reduce_equation1", "")) 
   294                                                                         --> x = 0 | -6 + 5 * x = 0*)
   293                                                                         --> x = 0 | -6 + 5 * x = 0*)
   295 t' |> UnparseC.term; t' |> TermC.atomty;
   294 t' |> UnparseC.term; t' |> TermC.atomty;
   296 val thm = @{thm d2_reduce_equation1};
   295 val thm = @{thm d2_reduce_equation1};
   297 thm |> Thm.prop_of |> UnparseC.term; thm |> Thm.prop_of |> TermC.atomty;
   296 thm |> Thm.prop_of |> UnparseC.term; thm |> Thm.prop_of |> TermC.atomty;
   298 val SOME (t'', _) = rewrite_inst_ thy e_rew_ord Rule_Set.empty true subst thm t'; UnparseC.term t'';
   297 val SOME (t'', _) = rewrite_inst_ ctxt e_rew_ord Rule_Set.empty true subst thm t'; UnparseC.term t'';
   299 (* NONE with d2_reduce_equation1:   "(bdv*(a +b*bdv)=0) = ((bdv=0)|(a+b*bdv=0))"
   298 (* NONE with d2_reduce_equation1:   "(bdv*(a +b*bdv)=0) = ((bdv=0)|(a+b*bdv=0))"
   300    instead   d2_reduce_equation1:   "(bdv*(a +b*bdv)=0) = ((bdv=0)|(a+b*bdv=(0::real)))"
   299    instead   d2_reduce_equation1:   "(bdv*(a +b*bdv)=0) = ((bdv=0)|(a+b*bdv=(0::real)))"
   301 *)
   300 *)
   302 if UnparseC.term t'' = "x = 0 \<or> - 6 + 5 * x = 0" then ()
   301 if UnparseC.term t'' = "x = 0 \<or> - 6 + 5 * x = 0" then ()
   303 else error "rls d2_polyeq_bdv_only_simplify broken";
   302 else error "rls d2_polyeq_bdv_only_simplify broken";