test/Tools/isac/Minisubpbl/100a-init-rootpbl-Maximum.sml
author wneuper <Walther.Neuper@jku.at>
Thu, 16 Nov 2023 08:15:46 +0100
changeset 60763 2121f1a39a64
child 60766 2e0603ca18a4
permissions -rw-r--r--
prepare 14: improved item_to_add

emergency-CS:
* no code cleanup
* ERROR in test/../biegelinie-3.sml outcommented
     1 (* Title:  "Minisubpbl/100a-init-rootpbl-Maximum.sml"
     2    Author: Walther Neuper 1105
     3    (c) copyright due to lincense terms.
     4 
     5 COMPARE Specify/specify.sml --- specify-phase: low level functions ---
     6 
     7 ATTENTION: the file creates buffer overflow if copied in one piece !
     8 
     9 Note: This test --- steps into me --- more than once, to a somewhat extreme extent;
    10   in order not to get lost while working in Test_Some etc, 
    11   re-introduce  ML (*--- step into XXXXX ---*) and Co.
    12   and use Sidekick for orientation.
    13   Nesting is indicated by  /---   //--   ///-  at the left margin of the comments.
    14 *)
    15 (*/------- these overwrite definitions in section above ---\*)
    16 open Ctree;
    17 open Pos;
    18 open TermC;
    19 open Istate;
    20 open Tactic;
    21 open I_Model;
    22 open P_Model
    23 open Rewrite;
    24 open Step;
    25 open LItool;
    26 open LI;
    27 open Test_Code
    28 open Specify
    29 open ME_Misc
    30 open Pre_Conds;
    31 (*\------- these overwrite definitions in section above ---/*)
    32 
    33 val (_(*example text*),
    34   (model as ("Constants [r = (7::real)]" :: "Maximum A" :: "AdditionalValues [u, v]" :: 
    35      "Extremum (A = 2 * u * v - u \<up> 2)" :: 
    36      "SideConditions [((u::real) / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2]" :: 
    37      "SideConditions [((u::real) / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2]" :: 
    38      "SideConditions [(u::real) / 2 = r * sin \<alpha>, 2 / v = r * cos \<alpha>]" ::
    39 (*---------------------------------------------,(v::real) / 2 = r * cos \<alpha>]" --- ERROR in example*)
    40      "FunctionVariable a" :: "FunctionVariable b" :: "FunctionVariable \<alpha>" :: 
    41      "Domain {0 <..< r}" :: "Domain {0 <..< r}" :: "Domain {0 <..< \<pi> / 2}" ::
    42      "ErrorBound (\<epsilon> = (0::real))" :: []), 
    43    refs as ("Diff_App", 
    44      ["univariate_calculus", "Optimisation"],
    45      ["Optimisation", "by_univariate_calculus"])))
    46   = Store.get (Know_Store.get_expls @{theory}) ["Diff_App-No.123a"] ["Diff_App-No.123a"];
    47 
    48 val c = [];
    49 val return_init_calc = 
    50  Test_Code.init_calc @{context} [(model, refs)]; (*val Model_Problem = nxt;*)
    51 (*/------------------- step into init_calc -------------------------------------------------\\*)
    52 "~~~~~ fun init_calc , args:"; val (ctxt, [(model, refs as (thy_id, _, _))]) =
    53   (@{context}, [(model, refs)]);
    54     val thy = thy_id |> ThyC.get_theory ctxt
    55     val ((pt, p), tacis) = Step_Specify.initialise' thy (model, refs)
    56 	  val tac = case tacis of [] => Tactic.Empty_Tac | _ => (#1 o hd) tacis
    57 	  val f = 
    58            TESTg_form ctxt (pt,p);
    59 "~~~~~ fun TESTg_form , args:"; val (ctxt, ptp) = (ctxt, (pt,p));
    60     val (form, _, _) =
    61    ME_Misc.pt_extract ctxt ptp;
    62 "~~~~~ fun pt_extract , args:"; val (ctxt, (pt, (p, p_ as Pbl(*Frm,Pbl*)))) = (ctxt, ptp);
    63         val ppobj = Ctree.get_obj I pt p
    64         val f = if Ctree.is_pblobj ppobj then pt_model ppobj p_ else Ctree.get_obj pt_form pt p;
    65 
    66             (*if*) Ctree.is_pblobj ppobj (*then*);
    67            pt_model ppobj p_ ;
    68 "~~~~~ fun pt_model , args:"; val ((Ctree.PblObj {probl, spec, origin = (_, spec', hdl), ctxt, ...}), Pbl_) =
    69   (ppobj, p_);
    70       val (_, pI, _) = Ctree.get_somespec' spec spec';
    71 (*    val where_ = if pI = Problem.id_empty then []*)
    72                (*if*) pI = Problem.id_empty (*else*);
    73 	          val {where_rls, where_, model, ...} = Problem.from_store ctxt pI
    74 	          val (_, where_) = 
    75  Pre_Conds.check ctxt where_rls where_
    76               (model, I_Model.OLD_to_TEST probl);
    77 "~~~~~ fun check , args:"; val (ctxt, where_rls, pres, (model_patt, i_model)) =
    78   (ctxt, where_rls, where_, (model, I_Model.OLD_to_TEST probl));
    79       val (env_model, (env_subst, env_eval)) = 
    80            make_environments model_patt i_model;
    81 "~~~~~ fun make_environments , args:"; val (_, []) = (model_patt, i_model);
    82 (*\------------------- step into init_calc -------------------------------------------------//*)
    83 val (p,_,f,nxt,_,pt) = return_init_calc;
    84 
    85 (*+*)val PblObj {ctxt, probl, ...} = get_obj I pt [];
    86 (*+*)Proof_Context.theory_of ctxt (*= {Pure, .., Diff_App}*);
    87 (*+*)val Free ("r", Type ("Real.real", [])) = Syntax.read_term ctxt "r"
    88 (*+*)val [] = probl
    89 
    90 val return_me_Model_Problem = 
    91            me nxt p c pt; val Add_Given "Constants [r = 7]" = #4 return_me_Model_Problem;
    92 (*/------------------- step into me_Model_Problem ------------------------------------------\\*)
    93 "~~~~~ fun me , args:"; val (tac as Model_Problem, (p:Pos.pos'), (_:Test_Code.NEW), (pt:Ctree.ctree)) = (nxt, p, c, pt);
    94       val ctxt = Ctree.get_ctxt pt p
    95 val return_by_tactic = case
    96       Step.by_tactic tac (pt,p) of
    97 		    ("ok", (_, _, ptp)) => ptp;
    98 
    99 (*//------------------ step into by_tactic -------------------------------------------------\\*)
   100 "~~~~~ fun by_tactic , args:"; val (tac, (ptp as (pt, p))) = (tac, (pt,p));
   101 val Applicable.Yes tac' = (*case*)
   102       Step.check tac (pt, p) (*of*);
   103 (*+*)val Model_Problem' _ = tac';
   104 "~~~~~ fun check , args:"; val (tac, (ctree, pos)) = (tac, (pt, p));
   105   (*if*) Tactic.for_specify tac (*then*);
   106 
   107 Specify_Step.check tac (ctree, pos);
   108 "~~~~~ fun check , args:"; val (Tactic.Model_Problem, (pt, pos as (p, _))) =
   109   (tac, (ctree, pos));
   110         val (o_model, pI', ctxt) = case Ctree.get_obj I pt p of
   111           Ctree.PblObj {origin = (o_model, (_, pI', _), _), ctxt, ...} => (o_model, pI', ctxt)
   112 	      val {model = model_patt, ...} = Problem.from_store (Ctree.get_ctxt pt pos) pI'
   113 	      val pbl = I_Model.init_TEST o_model model_patt;
   114 
   115 val return_check =
   116     Applicable.Yes (Tactic.Model_Problem' (pI', I_Model.TEST_to_OLD pbl, []));
   117 (*\\------------------ step into by_tactic -------------------------------------------------//*)
   118 val (pt, p) = return_by_tactic;
   119 
   120 val return_do_next = (*case*)
   121       Step.do_next p ((pt, Pos.e_pos'), []) (*of*);
   122 (*//------------------ step into do_next ---------------------------------------------------\\*)
   123 "~~~~~ fun do_next , args:"; val (((ip as (_,p_)):pos'), ((ptp as (pt,p), tacis):Calc.state_pre)) =
   124   (p, ((pt, e_pos'),[]));
   125     val pIopt = get_pblID (pt,ip);
   126     (*if*) ip = ([],Res); (* = false*)
   127       val _ = (*case*) tacis (*of*);
   128       val SOME _ = (*case*) pIopt (*of*);
   129 
   130     val ("ok", ([(Add_Given "Constants [r = 7]", _, _)], [], _)) =
   131       Step.switch_specify_solve p_ (pt, ip);
   132 "~~~~~ fun switch_specify_solve , args:"; val (state_pos, (pt, input_pos)) = (p_, (pt, ip));
   133       (*if*) Pos.on_specification ([], state_pos) (*then*);
   134 
   135     val ("ok", ([(Add_Given "Constants [r = 7]", _, _)], [], _)) =
   136       Step.specify_do_next (pt, input_pos);
   137 (*///----------------- step into specify_do_next -------------------------------------------\\*)
   138 "~~~~~ fun specify_do_next , args:"; val (ptp as (pt, (p, p_))) = (pt, input_pos);
   139 
   140 (*  val (_, (p_', tac)) =*)
   141 val return_find_next_step = (*keep for continuing specify_do_next*)
   142    Specify.find_next_step ptp;
   143 (*////---------------- step into find_next_step --------------------------------------------\\*)
   144 "~~~~~ fun find_next_step , args:"; val ((pt, pos as (_, p_))) = (ptp);
   145     val {meth = met, origin = origin as (oris, o_refs as (_, pI', mI'), _), probl = pbl,
   146       spec = refs, ...} = Calc.specify_data (pt, pos);
   147     val ctxt = Ctree.get_ctxt pt pos;
   148       (*if*) Ctree.just_created (pt, pos) andalso origin <> Ctree.e_origin (*else*);
   149         (*if*) p_ = Pos.Pbl (*then*);
   150 
   151 val return_for_problem as ("dummy", (Pbl, Add_Given "Constants [r = 7]")) =
   152    Specify.for_problem ctxt oris (o_refs, refs) (pbl, I_Model.OLD_to_TEST met);
   153 (*/////--------------- step into for_problem -----------------------------------------------\\*)
   154 "~~~~~ fun for_problem , args:"; val (ctxt, oris, ((dI', pI', mI'), (dI, pI, mI)), (pbl, met))
   155   = (ctxt, oris, (o_refs, refs), (pbl, met));
   156     val cdI = if dI = ThyC.id_empty then dI' else dI;
   157     val cpI = if pI = Problem.id_empty then pI' else pI;
   158     val cmI = if mI = MethodC.id_empty then mI' else mI;
   159     val {model = pbt, where_rls, where_, ...} = Problem.from_store ctxt cpI;
   160     val {model = mpc, ...} = MethodC.from_store ctxt cmI;
   161 
   162     val return_check =
   163  Pre_Conds.check ctxt where_rls where_ (pbt, I_Model.OLD_to_TEST pbl);
   164 (*//////-------------- step into check -------------------------------------------------\\*)
   165 "~~~~~ fun check , args:"; val (ctxt, where_rls, pres, (model_patt, i_model)) =
   166   (ctxt, where_rls, where_, (pbt, I_Model.OLD_to_TEST pbl));
   167       val return_make_environments =
   168            make_environments model_patt i_model;
   169 (*///// //------------ step into of_max_variant --------------------------------------------\\*)
   170 "~~~~~ fun of_max_variant , args:"; val (model_patt, i_model) =
   171   (model_patt, i_model);
   172 
   173 (*+*)val "[\n(1, [1, 2, 3], false ,#Given, (Inc_TEST Constants [] [__=__, __=__], Position.T)), \n(2, [1, 2, 3], false ,#Find, (Inc_TEST Maximum __, Position.T)), \n(3, [1, 2, 3], false ,#Find, (Inc_TEST AdditionalValues [] [__, __], Position.T)), \n(4, [1, 2, 3], false ,#Relate, (Inc_TEST Extremum (__=__), Position.T)), \n(5, [1, 2], false ,#Relate, (Inc_TEST SideConditions [] [__=__, __=__], Position.T))]"
   174  = i_model |> I_Model.to_string_TEST ctxt
   175     val all_variants =
   176         map (fn (_, variants, _, _, _) => variants) i_model
   177         |> flat
   178         |> distinct op =
   179     val variants_separated = map (filter_variants' i_model) all_variants
   180     val sums_corr = map (Model_Def.cnt_corrects) variants_separated
   181     val sum_variant_s = Model_Def.arrange_args sums_corr (1, all_variants)
   182 (*+*)val [(0, 1), (0, 2), (0, 3)] = sum_variant_s
   183     val (_, max_variant) = hd (*..crude decision, up to improvement *)
   184       (sort (fn ((i, _), (j, _)) => int_ord (i, j)) sum_variant_s)
   185     val i_model_max =
   186       filter (fn (_, variants, _ , _ ,_) => member (op =) variants max_variant) i_model
   187     val equal_descr_pairs = map (get_equal_descr i_model) model_patt |> flat
   188 (*for building make_env_s -------------------------------------------------------------------\*)
   189 (*!!!*) val ("#Given", (descr, term), pos) =
   190   Model_Pattern.split_descriptor ctxt ("#Given", @{term "Constants [r = (7::real)]"}, Position.none)
   191 (*!!!*) val patt = equal_descr_pairs |> hd |> #1
   192 (*!!!*)val equal_descr_pairs =
   193   (patt,
   194   (1, [1, 2, 3], true, "#Given", (Cor_TEST ((descr, (*!*)TermC.isalist2list(*!*) term)), pos)))
   195   :: tl equal_descr_pairs
   196 (*for building make_env_s -------------------------------------------------------------------/*)
   197 
   198     val env_model = make_env_model equal_descr_pairs;
   199 (*///// ///----------- step into make_env_model --------------------------------------------\\*)
   200 "~~~~~ fun make_env_model , args:"; val (equal_descr_pairs) = (equal_descr_pairs);
   201 
   202 val xxx = (fn ((_, (_, id)), (_, _, _, _, (feedb, _)))
   203        => (mk_env_model id feedb));
   204 val ((_, (_, id)), (_, _, _, _, (feedb, _))) = nth 4 equal_descr_pairs;
   205 (*\\\\\ \\\----------- step into make_env_model --------------------------------------------//*)
   206 (*||||| ||------------ contine of_max_variant ------------------------------------------------*)
   207 
   208     val equal_givens = filter (fn ((m_field, _), _) => m_field = "#Given") equal_descr_pairs
   209     val subst_eval_list = make_envs_preconds equal_givens
   210 val return_make_envs_preconds =
   211            make_envs_preconds equal_givens;
   212 (*///// ///----------- step into make_envs_preconds ----------------------------------------\\*)
   213 "~~~~~ fun make_envs_preconds , args:"; val (equal_givens) = (equal_givens);
   214 val xxx = (fn ((_, (_, id)), (_, _, _, _, (feedb, _))) => discern_feedback id feedb)
   215 ;
   216 xxx: (Model_Pattern.single * I_Model.single_TEST) -> ((term * term) * (term * term)) list;
   217 val return_discern_feedback =
   218            discern_feedback id feedb;
   219 (*nth 1 equal_descr_pairs* )
   220 "~~~~~ fun discern_feedback , args:"; val (id, (Model_Def.Cor_TEST ((descr, ts), _))) = (id, feedb);
   221 ( *nth 2 equal_descr_pairs*)
   222 "~~~~~ fun discern_feedback , args:"; val (id, (Model_Def.Inc_TEST ((descr, ts)))) = (id, feedb);
   223 
   224 (*nth 1 equal_descr_pairs* )
   225 (*+*)val [((Const ("fixes", typ1), Free ("r", typ2)),
   226            (Free ("r", typ3), value))] = return_discern_feedback
   227 (*+*)val true = typ1 = typ2
   228 (*+*)val true = typ3 = HOLogic.realT
   229 (*+*)val "7" = UnparseC.term ctxt value
   230 ( *nth 2 equal_descr_pairs*)
   231 (*+*)val [] = return_discern_feedback
   232 
   233 val return_discern_typ =
   234            discern_typ id (descr, ts);
   235 "~~~~~ fun discern_typ , args:"; val (id, (descr, ts)) = (id, (descr, ts));
   236 (*nth 1 equal_descr_pairs* )
   237 (*+*)val [((Const ("fixes", typ1), Free ("r", typ2)),
   238            (Free ("r", typ3), value))] = return_discern_typ
   239 (*+*)val true = typ1 = typ2
   240 (*+*)val true = typ3 = HOLogic.realT
   241 (*+*)val "7" = UnparseC.term ctxt value
   242 ( *nth 2 equal_descr_pairs*)
   243 (*+*)val [] = return_discern_typ;
   244 (**)
   245            switch_type id ts;
   246 "~~~~~ fun switch_type , args:"; val (Const (descr_string, _), ts) = (descr, ts);
   247 
   248 (*nth 1 equal_descr_pairs* )
   249 val return_switch_type_TEST = Const (descr_string, ts |> hd |> TermC.lhs |> type_of)
   250 
   251 (*+*)val Const ("Input_Descript.Constants", typ) = return_switch_type_TEST
   252 (*+*)val Type ("Real.real", []) = typ
   253 ( *nth 2 equal_descr_pairs*)
   254 (*+*)val return_switch_type_TEST = descr
   255 (**)
   256 (*\\\\\ \\\----------- step into make_envs_preconds ----------------------------------------//*)
   257 (*||||| ||------------ contine of_max_variant ------------------------------------------------*)
   258     val subst_eval_list = make_envs_preconds equal_givens
   259     val (env_subst, env_eval) = split_list subst_eval_list
   260 val make_environments = (i_model_max, env_model, (env_subst, env_eval)); (*GOON*)
   261 (*\\\\\ \\------------ step into of_max_variant --------------------------------------------//*)
   262       val (i_model_max, env_model, (env_subst, env_eval)) = make_environments
   263 (*!!!/----- we had a helpful argument for constructing env_model and (env_subst, env_eval)---\*)
   264       val (i_max_variant, env_model, (env_subst, env_eval)) = (i_model_max, [], ([], []))
   265 (*!!!\----- we had a helpful argument for constructing env_model and (env_subst, env_eval)---/*) 
   266 (*||||| |------------- contine check -----------------------------------------------------*)
   267       val pres_subst = map (TermC.subst_atomic_all env_subst) pres;
   268       val pres_subst_other = map (TermC.subst_atomic_all env_model) (map #2 pres_subst);
   269       val full_subst = if env_eval = [] then pres_subst_other
   270         else map (TermC.subst_atomic_all env_eval) (map #2 pres_subst_other)
   271       val evals = map (eval ctxt where_rls) full_subst
   272 val return_ = (i_model_max, env_subst, env_eval)
   273 (*\\\\\ \------------- step into check -----------------------------------------------------//*)
   274 val (preok, _) = return_check;
   275 
   276 (*|||||--------------- contine.. for_problem -------------------------------------------------*)
   277 val false =
   278     (*if*) dI' = ThyC.id_empty andalso dI = ThyC.id_empty (*else*);
   279 val false =
   280       (*if*) pI' = Problem.id_empty andalso pI = Problem.id_empty (*else*);
   281 val NONE =
   282      (*case*) find_first (fn (_, _, _, _, feedb) => I_Model.is_error feedb) pbl (*of*);
   283 
   284 (** )val SOME (fd, ct') as ("#Given", "Constants [r = 7]") =( **)
   285 (**)val return_item_to_add as SOME ("#Given", xxx) =(**) (*case*) 
   286    Specify.item_to_add ctxt oris (I_Model.OLD_to_TEST pbl) (*of*);
   287 (*///// /------------- step into item_to_add -----------------------------------------------\\*)
   288 (*==================== see test/../i_model.sml --- fun item_to_add ---========================*)
   289 (*\\\\\ \------------- step into item_to_add -----------------------------------------------//*)
   290 val SOME (fd, ct') = return_item_to_add
   291 (*+*)val ("#Given", "Constants [r = 7]")  = (fd, ct') (*from NEW item_to_add*)
   292 
   293 (*|||||--------------- continue.. for_problem ------------------------------------------------*)
   294 val return_for_problem_step as ("dummy", (Pbl, Add_Given "Constants [r = 7]"))
   295   = ("dummy", (Pos.Pbl, P_Model.mk_additem fd ct'))
   296 (** )return_for_problem_step = return_for_problem( *..would require equality types*)
   297 (*\\\\\--------------- step into for_problem -----------------------------------------------//*)
   298 val return_find_next_step as ("dummy", (Pbl, Add_Given "Constants [r = 7]"))
   299   = return_for_problem
   300 (*\\\\---------------- step into find_next_step --------------------------------------------//*)
   301 (*|||----------------- continue.. specify_do_next --------------------------------------------*)
   302 val (_, (p_', tac as Add_Given "Constants [r = 7]")) = return_find_next_step
   303 
   304     val ist_ctxt =  Ctree.get_loc pt (p, p_)
   305 (*+*)val Add_Given "Constants [r = 7]" = tac
   306 val _ =
   307     (*case*) tac (*of*);
   308 
   309 val return_by_tactic_input as ("ok", ([(Add_Given "Constants [r = 7]", _, _)], [], _)) =
   310 Step_Specify.by_tactic_input tac (pt, (p, p_'));
   311 "~~~~~ fun by_tactic_input , args:"; val ((Tactic.Add_Given ct), ptp) =
   312   (tac, (pt, (p, p_')));
   313 
   314    Specify.by_Add_ "#Given" ct ptp;
   315 "~~~~~ fun by_Add_ , args:"; val (m_field, ct ,(pt, pos as (_, p_))) =
   316   ("#Given", ct, ptp);
   317     val (met, oris, (_, pI', mI'), pbl, (_, pI, mI), ctxt) = SpecificationC.get_data (pt, pos)
   318     val (i_model, m_patt) =
   319        if p_ = Pos.Met then
   320          (met,
   321            (if mI = MethodC.id_empty then mI' else mI) |> MethodC.from_store ctxt |> #model)
   322        else
   323          (pbl,
   324            (if pI = Problem.id_empty then pI' else pI) |> Problem.from_store ctxt |> #model);
   325 
   326       (*case*)
   327    I_Model.check_single ctxt m_field oris i_model m_patt ct (*of*);
   328 "~~~~~ fun check_single , args:"; val (ctxt, m_field, o_model, i_model, m_patt, (str(*, pos*))) =
   329   (ctxt, m_field, oris, i_model, m_patt, ct);
   330         val (t as (descriptor $ _)) = Syntax.read_term ctxt str
   331 
   332 (*+*)val "Constants [r = 7]" = UnparseC.term ctxt t;
   333 
   334         val SOME m_field' =
   335           (*case*) Model_Pattern.get_field descriptor m_patt (*of*);
   336            (*if*) m_field <> m_field' (*else*);
   337 
   338 (*+*)val "#Given" = m_field; val "#Given" = m_field'
   339 
   340 val ("", ori', all) =
   341           (*case*) O_Model.contains ctxt m_field o_model t (*of*);
   342 
   343 (*+*)val (_, _, _, _, vals) = hd o_model;
   344 (*+*)val "Constants [r = 7]" = UnparseC.term ctxt (@{term Constants} $ (hd vals));
   345 (*+*)if "[\n(1, [\"1\", \"2\", \"3\"], #Given, Constants, [\"[r = 7]\"]), " ^ 
   346 (*+*)    "\n(2, [\"1\", \"2\", \"3\"], #Find, Maximum, [\"A\"]), " ^ 
   347 (*+*)    "\n(3, [\"1\", \"2\", \"3\"], #Find, AdditionalValues, [\"[u]\", \"[v]\"]), " ^ 
   348 (*+*)    "\n(4, [\"1\", \"2\", \"3\"], #Relate, Extremum, [\"A = 2 * u * v - u \<up> 2\"]), " ^ 
   349 (*+*)    "\n(5, [\"1\", \"2\"], #Relate, SideConditions, [\"[(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2]\"]), " ^ 
   350 (*+*)    "\n(6, [\"3\"], #Relate, SideConditions, [\"[u / 2 = r * sin \<alpha>]\", \"[2 / v = r * cos \<alpha>]\"]), " ^ 
   351 (*+*)    "\n(7, [\"1\"], #undef, FunctionVariable, [\"a\"]), " ^ 
   352 (*+*)    "\n(8, [\"2\"], #undef, FunctionVariable, [\"b\"]), \n(9, [\"3\"], #undef, FunctionVariable, [\"\<alpha>\"]), " ^ 
   353 (*+*)    "\n(10, [\"1\", \"2\"], #undef, Input_Descript.Domain, [\"{0<..<r}\"]), " ^ 
   354 (*+*)    "\n(11, [\"3\"], #undef, Input_Descript.Domain, [\"{0<..<\<pi> / 2}\"]), " ^ 
   355 (*+*)    "\n(12, [\"1\", \"2\", \"3\"], #undef, ErrorBound, [\"\<epsilon> = 0\"])]"
   356 (*+*)= O_Model.to_string ctxt o_model then () else error "o_model CHANGED";
   357 
   358   (*case*) is_notyet_input ctxt i_model all ori' m_patt (*of*);
   359 "~~~~~ fun is_notyet_input , args:"; val (ctxt, itms, all, (i, v, f, d, ts), pbt) =
   360   (ctxt, i_model, all, ori', m_patt);
   361 val SOME (_, (_, pid)) =
   362   (*case*) find_first (eq1 d) pbt (*of*);
   363 (*local*)fun eq3 f d (_, _, _, f', itm_) = f = f' andalso d = (I_Model.descriptor itm_);(*local*)
   364 val SOME (_, _, _, _, itm_) =
   365     (*case*) find_first (eq3 f d) itms (*of*);
   366 val ts' = inter op = (o_model_values itm_) ts;
   367             (*if*) subset op = (ts, ts') (*else*);
   368 val return_is_notyet_input = ("", 
   369            ori_2itm itm_ pid all (i, v, f, d, subtract op = ts' ts));
   370 "~~~~~ fun ori_2itm , args:"; val (itm_, pid, all, (id, vt, fd, d, ts)) =
   371   (itm_, pid, all, (i, v, f, d, subtract op = ts' ts));
   372     val ts' = union op = (o_model_values itm_) ts;
   373     val pval = [Input_Descript.join'''' (d, ts')]
   374     val complete = if eq_set op = (ts', all) then true else false
   375 
   376 (*+*)val "Inc Constants [] , pen2str" = itm_ |> I_Model.feedback_to_string ctxt
   377 (*\\\----------------- step into specify_do_next -------------------------------------------//*)
   378 (*\\------------------ step into do_next ---------------------------------------------------//*)
   379 val ("ok", (ts as (_, _, _) :: _, _, (pt, p))) = return_do_next
   380 
   381 (*|------------------- continue with me_Model_Problem ----------------------------------------*)
   382 val tacis as (_::_) =
   383         (*case*) ts (*of*);
   384           val (tac, _, _) = last_elem tacis
   385 
   386 val return_Model_Problem = (p, [] : NEW, TESTg_form ctxt (pt, p), tac, Celem.Sundef, pt);
   387 (*//------------------ step into TESTg_form ------------------------------------------------\\*)
   388 "~~~~~ fun TESTg_form , args:"; val (ctxt, ptp) = (ctxt, (pt, p));
   389 
   390     val (form, _, _) =
   391    ME_Misc.pt_extract ctxt ptp;
   392 "~~~~~ fun pt_extract , args:"; val (ctxt, (pt, (p, p_(*Frm,Pbl*)))) = (ctxt, ptp);
   393         val ppobj = Ctree.get_obj I pt p
   394         val f = if Ctree.is_pblobj ppobj then pt_model ppobj p_ else Ctree.get_obj pt_form pt p;
   395           (*if*) Ctree.is_pblobj ppobj (*then*);
   396 
   397            pt_model ppobj p_;
   398 "~~~~~ fun pt_model , args:"; val ((Ctree.PblObj {probl, spec, origin = (_, o_spec, hdl), ctxt, ...}), 
   399   Pbl(*Frm,Pbl*)) = (ppobj, p_);
   400       val (_, _, met_id) = References.select_input o_spec spec
   401       val (allcorr, _) = Pre_Conds.check_internal ctxt (I_Model.OLD_to_TEST probl) (Pos.Met, met_id)
   402 val return_pt_model = Ctree.ModSpec (allcorr, Pos.Pbl, hdl, probl, (*where_*)[(*Problem.from_store in check*)], spec)
   403 
   404 (*|------------------- continue with TESTg_form ----------------------------------------------*)
   405 val Ctree.ModSpec (spec as (_, p_, _, gfr, where_, _)) =
   406     (*case*) form (*of*);
   407     Test_Out.PpcKF (  (Test_Out.Problem [],
   408  			P_Model.from (Proof_Context.theory_of ctxt) gfr where_));
   409 
   410    P_Model.from (Proof_Context.theory_of ctxt) gfr where_;
   411 "~~~~~ fun from , args:"; val (thy, itms, where_) = ((Proof_Context.theory_of ctxt), gfr, where_);
   412     fun coll model [] = model
   413       | coll model ((_, _, _, field, itm_) :: itms) =
   414         coll (add_sel_ppc thy field model (item_from_feedback thy itm_)) itms;
   415 
   416  val gfr = coll P_Model.empty itms;
   417 "~~~~~ fun coll , args:"; val (model, ((aaa, bbb_,ccc_, field, itm_) :: itms))
   418   = (P_Model.empty, itms);
   419 
   420 (*+*)val 4 = length itms;
   421 (*+*)val itm = nth 1 itms;
   422 
   423            coll P_Model.empty [itm];
   424 "~~~~~ fun coll , iterate:"; val (model, ((aaa, bbb_,ccc_, field, itm_) :: []))
   425   = (P_Model.empty, [itm]);
   426 
   427           (add_sel_ppc thy field model (item_from_feedback thy itm_));
   428 "~~~~~ fun add_sel_ppc , args:"; val ((_: theory), sel, {Given = gi, Where = wh, Find = fi, With = wi, Relate = re}, x )
   429   = (thy, field, model, (item_from_feedback thy itm_));
   430 
   431    P_Model.item_from_feedback thy itm_;
   432 "~~~~~ fun item_from_feedback , args:"; val (thy, (I_Model.Inc ((d, ts), _))) = (thy, itm_);
   433    P_Model.Incompl (UnparseC.term_in_thy thy (Input_Descript.join (d, ts)));
   434 (*\\------------------ step into TESTg_form ------------------------------------------------//*)
   435 (*\------------------- step into me_Model_Problem ------------------------------------------//*)
   436 val (p, _, f, nxt, _, pt) = return_me_Model_Problem
   437 
   438 (*+++*)val {probl, ...} = Calc.specify_data (pt, pos);
   439 (*+++*)val "[\n(1 ,[1, 2, 3] ,false ,#Given ,Inc Constants [] , pen2str), \n(2 ,[1, 2, 3] ,false ,#Find ,Inc Maximum , pen2str), \n(3 ,[1, 2, 3] ,false ,#Find ,Inc AdditionalValues [] , pen2str), \n(4 ,[1, 2, 3] ,false ,#Relate ,Inc Extremum , pen2str), \n(5 ,[1, 2] ,false ,#Relate ,Inc SideConditions [] , pen2str)]"
   440  = probl |> I_Model.to_string ctxt
   441 (*-------------------- contine me's ----------------------------------------------------------*)
   442 val return_me_add_find_Constants = me nxt p c pt;
   443                                       val Add_Find "Maximum A" = #4 return_me_add_find_Constants;
   444 (*/------------------- step into me_add_find_Constants -------------------------------------\\*)
   445 (*==================== done in "Minisubpbl/150a-add-given-Maximum.sml" subsequently =======================*)