src/Tools/isac/Knowledge/DiffApp-oldpbl.sml
author wneuper <Walther.Neuper@jku.at>
Wed, 11 Jan 2023 11:38:01 +0100
changeset 60650 06ec8abfd3bc
parent 60586 007ef64dbb08
permissions -rw-r--r--
eliminate use of Thy_Info 12: TermC partially
     1 (*8.01: aufgehoben wegen alter preconds, postconds*)
     2 
     3 (* rectangle with maximal area, inscribed in a circle of fixed radius
     4 
     5 problem-types and methods solving the respective problem-type
     6 
     7 (1) names of the problem-types and methods and their hierarchy
     8     as subproblems.
     9     names of problem-types are string lists (diss 5.3.), not shown
    10     here with exception of ["equation", "univariate"] in order to
    11     indicate, that this particular problem needs refinement to a
    12     more specific type of equation solvable by tan-square, etc.
    13 
    14 problem-types                     methods
    15 -------------------------------   ----------------------
    16 maximum                           maximum-by-differentiation
    17                                   maximum-by-experimentation
    18   make-fun                        make-explicit-and-substitute 
    19                                   introduce-a-new-variable
    20   max-of-fun-on-interval          max-of-fun-on-interval
    21     derivative                    differentiate
    22     ["equation", "univariate"]     tan-square
    23                                   
    24   find-values                     find-values
    25 
    26 (2) specification of the problem-types
    27 *)
    28 
    29 (* maximum *)
    30 (* ------- *)
    31 (* problem-type *)
    32 {given = ["fixed_values (cs::bool list)"],
    33  where_= ["foldl (op &) True (map is_equality cs)",
    34 	  "foldl (op &) True (map (Not o ((op <=) #0) o Rhs) cs)"],
    35  find=["maximum m", "values_for (ms::real list)"],
    36  with_=["Ex_frees ((foldl (op &) True (r#RS)) &       \
    37   \ (ALL m'. (subst (m,m') (foldl (op &) True (r#RS)) \
    38   \            --> m' <= m)))"],
    39  relate=["max_relation r", "additionalRels RS"]};
    40 (*  \<up>  is exponenation *)
    41 
    42 (* the functions Ex_frees, Rhs provide for the instantiation below *)
    43 
    44 (* (1) instantiation of maximum, + variant in "values_for" *)
    45 {given = ["fixed_values (R = #7)"],
    46  where_= ["is_equality (R = #7)",
    47 	  "Not (R <= #0)"],
    48  find  =["maximum A", "values_for [a,b]"],
    49  with_ =["EX A. A = a*b & (a//#2) \<up> #2 + (b//#2) \<up> #2 = R \<up> #2 \
    50   \ (ALL A'. A' = a*b & (a//#2) \<up> #2 + (b//#2) \<up> #2 = R \<up> #2   \
    51   \            --> A' <= A)))"],
    52  relate=["max_relation (A = a*b)",
    53 	 "additionalRels [(a//#2) \<up> #2 +(b//#2) \<up> #2 =R \<up> #2]"]};
    54 (* R,a,b are bound by given, find *)
    55 
    56 (* (2) instantiation of maximum *)
    57 {given = ["fixed_values (R = #7)"],
    58  where_= ["is_equality (R = #7)",
    59 	  "Not (R <= #0)"],
    60  find  =["maximum A", "values_for [A]"],
    61  with_ =["EX a b alpha. A = a*b &                               \
    62   \                     a = #2*R*sin alpha & b =#2*R*cos alpha &\
    63   \ (ALL A'. A' = a*b & a = #2*R*sin alpha & b =#2*R*cos alpha  \
    64   \            --> A' <= A)))"],
    65  relate=["max_relation (A = a*b)",
    66 	 "additionalRels [a=#2*R*sin alpha, b=#2*R*cos alpha]"]};
    67 (* R,A are bound by given, find *)
    68 
    69 
    70 (* make-fun *)
    71 (* -------- *)
    72 (* problem-type *)
    73 {given = ["equality (lhs = rhs)", "bound_variable v", "equalities es"],
    74  where_= [],
    75  find  = ["function_term lhs_"],
    76  with_ = [(*???*)],
    77  relate= [(*???*)]};
    78 (*the _ in lhs is used to transfer the lhs-identifier of equality*)
    79 
    80 (* (1) instantiation for make-explicit-and-substitute *)
    81 {given = ["equality A = a * b", "bound_variable a", 
    82 	  "equalities [(a//#2) \<up> #2 + (b//#2) \<up> #2 = R \<up> #2]"],
    83  where_= [],
    84  find  = ["function_term A_"(*=(a * #2 * sqrt(R \<up> #2 - (a//#2) \<up> #2))*)],
    85  with_ = [],
    86  relate= []};
    87 
    88 (* (2) instantiation for introduce-a-new-variable *)
    89 {given = ["equality A = a * b", "bound_variable alpha", 
    90 	  "equalities [a=#2*R*sin alpha, b=#2*R*cos alpha]"],
    91  where_= [],
    92  find  = ["function_term A_"(*=(#2*R*sin alpha *#2*R*cos alpha)*)],
    93  with_ = [],
    94  relate= []};
    95 
    96 
    97 (* max-of-fun-on-interval *)
    98 (* ---------------------- *)
    99 (* problem-type *)
   100 {given = ["function_term t", "bound_variable v",
   101 	"domain {x::real. lower_bound <= x & x <= upper_bound}"],
   102  where_= [],
   103  find  = ["maximums ms"],
   104  with_ = ["ALL m. m : ms --> \
   105   \  (ALL x::real. lower_bound <= x & x <= upper_bound \
   106   \        --> (%v. t) x <= m)"],
   107  relate= []}: string model;
   108 (* ':' is 'element', '::' is a type constraint *)
   109 
   110 (* (1) variant of instantiation *)
   111 {given = ["function_term (a * #2 * sqrt(R \<up> #2 - (a//#2) \<up> #2))",
   112 	"bound_variable a",
   113 	"domain {x::real. #0 <= x & x <= #2*R}"],
   114  where_= [],
   115  find  = ["maximums AM"],
   116  with_ = ["ALL am. am : AM --> \
   117   \  (ALL x::real. #0 <= x & x <= #2*R \
   118   \        --> (%a. (a * #2 * sqrt(R \<up> #2 - (a//#2) \<up> #2))) x <= am)"],
   119  relate= []};
   120 
   121 (* (2) variant of instantiation *)
   122 {given = ["function_term (#2*R*sin alpha * #2*R*cos alpha)",
   123 	"bound_variable alpha",
   124 	"domain {x::real. #0 <= x & x <= pi//#2}"],
   125  where_= [],
   126  find  = ["maximums AM"],
   127  with_ = ["ALL am. am : AM --> \
   128   \  (ALL x::real. #0 <= x & x <= pi//#2 \
   129   \        --> (%alpha. (#2*R*sin alpha * #2*R*cos alpha)) x <= am)"],
   130  relate= []};
   131 
   132 
   133 (* derivative *)
   134 (* ---------- *)
   135 (* problem-type *)
   136 {given = ["function_term t", "bound_variable bdv"],
   137  where_= [],
   138  find  = ["derivative t'"],
   139  with_ = ["t' is_derivative_of (%bdv. t)"],
   140  relate= []};
   141 (*the ' in t' is used to transfer the identifier from function_term*)
   142 
   143 
   144 (* ["equation", "univariate"] *)
   145 (* ------------------------- *)
   146 (* problem-type *)
   147 {given = ["equality (lhs = rhs)",
   148 	  "bound_variable v", "error_bound eps"],
   149  where_= [],
   150  find  = ["solutions S"],
   151  with_ = ["ALL s. s : S --> || (%v. lhs) s - (%v. rhs) s || <= eps"],
   152  relate= []};
   153 
   154 
   155 (* find-values *)
   156 (* ----------- *)
   157 (* problem-type *)
   158 {given = ["max_relation r", "additionalRels RS"],
   159  where_= [],
   160  find  = ["values_for VS"],
   161  with_ = [(*???*)],
   162  relate= []};
   163 
   164 (* (1) variant of instantiation *)
   165 {given = ["max_relation (A = a*b)",
   166 	  "additionalRels [(a//#2) \<up> #2 + (b//#2) \<up> #2 =R \<up> #2]"],
   167  where_= [],
   168  find  = ["values_for [a,b]"],
   169  with_ = [],
   170  relate= []};
   171 
   172 (* (2) variant of instantiation *)
   173 {given = ["max_relation (A = a*b)",],
   174  where_= [],
   175  find  = ["values_for [A]",
   176 	  "additionalRels [a=#2*R*sin alpha, b=#2*R*cos alpha]"],
   177  with_ = [],
   178  relate= []};
   179 
   180 (*
   181 (3) data-transfer between the the hidden formalization, 
   182     the root-problem and the sub-problems; 
   183 
   184 maximum -> #given.make-fun
   185 -------------------
   186 maximum.#relate "max_relation r"         -> "equality (lhs = rhs)"
   187 formalization   "bound_variable v"       -> "bound_variable v"
   188 maximum.#relate "additionalRels RS"-> "equalities es"
   189 
   190 
   191 maximum + make-fun -> #given.max-of-fun-on-interval
   192 --------------------------------------------
   193 make-fun.#find  "function_term lhs_"     -> "function_term t"
   194 make-fun.#given "bound_variable v"       -> "bound_variable v"
   195 formalization                            -> "domain {x::real. ...}"
   196 
   197 
   198 max-of-fun-on-interval -> #given.derivative
   199 ------------------------------------
   200 make-fun.#find  "function_term lhs_"     -> "function_term t"
   201 make-fun.#given "bound_variable v"       -> "bound_variable bdv"
   202 
   203 
   204 max-of-fun-on-interval + derivative -> 
   205                                 #given.["equation", "univariate"]
   206 ----------------------------------------------------------------
   207 derivative.#find "derivative t'"         -> "equality (lhs = rhs)"
   208                                                       (* t'= #0 *)
   209 make-fun.#given  "bound_variable v"      -> "bound_variable v"
   210 formalization                            -> "error_bound eps"
   211 
   212 
   213 maximum + make-fun + max-of-fun-on-interval -> #given.find-values
   214 ----------------------------------------------------------
   215 maximum.#relate "max_relation r"         -> "max_relation r"
   216 maximum.#relate "additionalRels RS"-> "additionalRels RS"
   217 *)
   218 
   219 
   220 
   221 
   222 (* vvv--- geht nicht wegen fun-types
   223 parse thy "case maxmin of is_max => (m' <= m) | is_min => (m <= m')";
   224 parse thy "if maxmin = is_max then (m' <= m) else (m <= m')";
   225 parse thy "if a=b then a else b";
   226 parse thy "maxmin = is_max";
   227 parse thy "maxmin =!= is_max";
   228     \<up> --- geht nicht wegen fun-types *)
   229 
   230 "pbltyp --- maximum ---";
   231 val pbltyp = {given=["fixed_values (cs::bool list)"],
   232 	      where_=["foldl (op &) True (map is_equality cs)",
   233 		      "foldl (op &) True (map (Not o ((op <=) #0) o Rhs) cs)"],
   234 	      find=["maximum m", "values_for (ms::real list)"],
   235 	      with_=["Ex_frees ((foldl (op &) True (r#rs)) &              \
   236                       \ (ALL m'. (subst (m,m') (foldl (op &) True (r#rs)) \
   237 		      \            --> m' <= m)))"],
   238 	      relate=["max_relation r", "additionalRels rs"]}:string model;
   239 val chkpbltyp = ((map (the o (parse thy))) o P_Model.to_list) pbltyp;
   240 "coil";
   241 val org = ["fixed_values [R=(R::real)]", 
   242 	   "bound_variable a", "bound_variable b", "bound_variable alpha",
   243 	   "domain {x::real. #0 <= x & x <= #2*R}",
   244 	   "domain {x::real. #0 <= x & x <= #2*R}",
   245 	   "domain {x::real. #0 <= x & x <= pi}",
   246 	   "maximum A",
   247 	   "max_relation A=#2*a*b - a \<up> #2",
   248 	   "additionalRels [(a//#2) \<up> #2 + (b//#2) \<up> #2 = R \<up> #2]", 
   249 	   "additionalRels [(a//#2) \<up> #2 + (b//#2) \<up> #2 = R \<up> #2]", 
   250 	   "additionalRels [a=#2*R*sin alpha, b=#2*R*cos alpha]"];
   251 val chkorg = map (the o (parse thy)) org;
   252 val pbl = {given=["fixed_values [R=(R::real)]"],where_=[],
   253 	   find=["maximum A", "values_for [a,b]"],
   254 	   with_=["EX alpha. A=#2*a*b - a \<up> #2 &    \
   255 	    \ a=#2*R*sin alpha & b=#2*R*cos alpha & \
   256 	    \ (ALL A'. A'=#2*a*b - a \<up> #2 & a=#2*R*sin alpha & b=#2*R*cos alpha \
   257 	    \         --> A' <= A)"],
   258 	   relate=["max_relation (A=#2*a*b - a \<up> #2)",
   259 		   "additionalRels [a=#2*R*sin alpha, b=#2*R*cos alpha]"]
   260 	  }: string model;
   261 val chkpbl = ((map (the o (parse thy))) o P_Model.to_list) pbl;
   262 
   263 "met --- maximum_by_differentiation ---";
   264 val met = {given=["fixed_values (cs::bool list)", "bound_variable v",
   265 		  "domain {x::real. lower_bound <= x & x <= upper_bound}",
   266 		  "approximation apx"],
   267 	   where_=[],
   268 	   find=["maximum m", "values_for (ms::real list)",
   269 		 "function_term t", "max_argument mx"],
   270 	   with_=["Ex_frees ((foldl (op &) True (rs::bool list)) & \
   271                   \ (ALL m'. (subst (m,m') (foldl (op &) True rs)  \
   272 		  \            --> m' <= m))) &                    \
   273 		  \m = (%v. t) mx &                                \
   274                   \( ALL x. lower_bound <= x & x <= upper_bound    \
   275 	          \       --> (%v. t) x <= m)"],
   276 	   relate=["rs::bool list"]}: string model;
   277 val chkpbl = ((map (the o (parse thy))) o P_Model.to_list) met;
   278 
   279 
   280 "pbltyp --- make_fun ---";
   281 (* subproblem [(hd #relate root, equality),
   282                (bound_variable formalization, bound_variable),
   283 	       (tl #relate root, equalities)] *) 
   284 val pbltyp = {given=["equality e", "bound_variable v", "equalities es"],
   285 	      where_=[],
   286 	      find=["function_term t"],with_=[(*???*)],
   287 	      relate=[(*???*)]}: string model;
   288 val chkpbltyp = ((map (the o (parse thy))) o P_Model.to_list) pbltyp;
   289 "coil";
   290 val pbl = {given=["equality (A=#2*a*b - a \<up> #2)", "bound_variable alpha",
   291 		  "equalities [a=#2*R*sin alpha, b=#2*R*cos alpha]"],
   292 	   where_=[],
   293 	   find=["function_term t"],
   294 	   with_=[],relate=[]}: string model;
   295 val chkpbl = ((map (the o (parse thy))) o P_Model.to_list) pbl;
   296 
   297 "met --- make_explicit_and_substitute ---";
   298 val met = {given=["equality e", "bound_variable v", "equalities es"],
   299 	   where_=[],
   300 	   find=["function_term t"],with_=[(*???*)],
   301 	   relate=[(*???*)]}: string model;
   302 val chkmet = ((map (the o (parse thy))) o P_Model.to_list) met;
   303 "met --- introduce_a_new_variable ---";
   304 val met = {given=["equality e", "bound_variable v", "substitutions es"],
   305 	   where_=[],
   306 	   find=["function_term t"],with_=[(*???*)],
   307 	   relate=[(*???*)]}: string model;
   308 val chkmet = ((map (the o (parse thy))) o P_Model.to_list) met;
   309 
   310 
   311 "pbltyp --- max_of_fun_on_interval ---";
   312 val pbltyp = {given=["function_term t", "bound_variable v",
   313 		     "domain {x::real. lower_bound <= x & x <= upper_bound}"],
   314 	      where_=[],
   315 	      find=["maximums ms"],
   316 	      with_=["ALL m. m : ms --> \
   317 	             \  (ALL x::real. lower_bound <= x & x <= upper_bound \
   318 	             \        --> (%v. t) x <= m)"],
   319 	      relate=[]}: string model;
   320 val chkpbltyp = ((map (the o (parse thy))) o P_Model.to_list) pbltyp;
   321 "coil";
   322 val pbl = {given=["function_term #2*(#2*R*sin alpha)*(#2*R*cos alpha) - \
   323                    \ (#2*R*sin alpha) \<up> #2", "bound_variable alpha",
   324 		  "domain {x::real. #0 <= x & x <= pi}"],where_=[],
   325 	   find=["maximums [#1234]"],with_=[],relate=[]}: string model;
   326 val chkpbl = ((map (the o (parse thy))) o P_Model.to_list) pbl;
   327 
   328 
   329 (* pbltyp --- max_of_fun --- *)
   330 (*
   331 {given=[],where_=[],find=[],with_=[],relate=[]}: string model;
   332 val (SOME ct) = parse thy ;
   333 TermC.atom_trace_detail @{context} (Thm.term_of ct);
   334 *)
   335 
   336 
   337 
   338 
   339 
   340 
   341 
   342 
   343 (* --- 14.1.00 --- *)
   344 "p.114";
   345 val org = {given=["[u=(#12::real)]"],where_=[],
   346 	   find=["[a,(b::real)]"],with_=[],
   347 	   relate=["[is_max A=a*(b::real), #2*a+#2*b=(u::real)]"]}: string model;
   348 val chkorg = ((map (the o (parse thy))) o P_Model.to_list) org;
   349 "p.116";
   350 val org = {given=["[c=#10, h=(#4::real)]"],where_=[],
   351 	   find=["[x,(y::real)]"],with_=[],
   352 	   relate=["[A=x*(y::real), c//h=x//(h-(y::real))]"]}: string model;
   353 val chkorg = ((map (the o (parse thy))) o P_Model.to_list) org;
   354 "p.117";
   355 val org = {given=["[r=#5]"],where_=[],
   356 	   find=["[x,(y::real)]"],with_=[],
   357 	   relate=["[is_max #0=pi*x \<up> #2 + pi*x*(r::real)]"]}: string model;
   358 val chkorg = ((map (the o (parse thy))) o P_Model.to_list) org;
   359 "#241";
   360 val org = {given=["[s=(#10::real)]"],where_=[],
   361 	   find=["[p::real]"],with_=[],
   362 	   relate=["[is_max p=n*m, s=n+(m::real)]"]}: string model;
   363 val chkorg = ((map (the o (parse thy))) o P_Model.to_list) org;
   364 
   365 (*
   366 {given=[],where_=[],find=[],with_=[],relate=[]}: string model;
   367 val (SOME ct) = parse thy ;
   368 TermC.atom_trace_detail @{context} (Thm.term_of ct);
   369 *)