prepare 14: improved item_to_add
authorwneuper <Walther.Neuper@jku.at>
Thu, 16 Nov 2023 08:15:46 +0100
changeset 607632121f1a39a64
parent 60762 f10bbfb2b3bb
child 60764 f82fd40eb400
prepare 14: improved item_to_add

emergency-CS:
* no code cleanup
* ERROR in test/../biegelinie-3.sml outcommented
TODO.md
src/Tools/isac/BaseDefinitions/BaseDefinitions.thy
src/Tools/isac/BaseDefinitions/libraryC.sml
src/Tools/isac/BaseDefinitions/model-pattern.sml
src/Tools/isac/BaseDefinitions/termC.sml
src/Tools/isac/BaseDefinitions/unparseC.sml
src/Tools/isac/Build_Isac.thy
src/Tools/isac/Knowledge/Biegelinie.thy
src/Tools/isac/Knowledge/EqSystem.thy
src/Tools/isac/MathEngBasic/model-def.sml
src/Tools/isac/MathEngine/step.sml
src/Tools/isac/Specify/Input_Descript.thy
src/Tools/isac/Specify/i-model.sml
src/Tools/isac/Specify/m-match.sml
src/Tools/isac/Specify/o-model.sml
src/Tools/isac/Specify/pre-conditions.sml
src/Tools/isac/Specify/specify-step.sml
src/Tools/isac/Specify/specify.sml
test/Tools/isac/Interpret/li-tool.sml
test/Tools/isac/Knowledge/algein.sml
test/Tools/isac/Knowledge/biegelinie-2.sml
test/Tools/isac/MathEngine/step.sml
test/Tools/isac/Minisubpbl/100a-init-rootpbl-Maximum.sml
test/Tools/isac/Minisubpbl/150a-add-given-Maximum.sml
test/Tools/isac/Minisubpbl/400-start-meth-subpbl.sml
test/Tools/isac/Specify/i-model.sml
test/Tools/isac/Specify/refine.sml
test/Tools/isac/Test_Isac.thy
test/Tools/isac/Test_Theory.thy
     1.1 --- a/TODO.md	Sun Oct 29 07:14:14 2023 +0100
     1.2 +++ b/TODO.md	Thu Nov 16 08:15:46 2023 +0100
     1.3 @@ -52,11 +52,27 @@
     1.4  
     1.5  ***** priority of WN items is top down, most urgent/simple on top
     1.6  
     1.7 +* WN: 
     1.8 +* WN: emergency-CS "prepare 14: improved item_to_add"
     1.9 +  * no code cleanup 
    1.10 +  * ERROR in test/../biegelinie-3.sml outcommented
    1.11 +* WN: NEW structure Descriptor.to_string, values_to_string (<--unpack_values), values_rep (<-- pack_atom),
    1.12 +                   ?^^^^^^^^^^ Feedback? (could contain handling input of of values in lists etc)
    1.13 +                               Feedback.args_to_string (<-- descr_vals_to_string), join descr $ values, ..
    1.14 +   no_brackets (<-- is_NObrack_list)
    1.15 +   locate SOMEWHERE BEFORE Model_Def (+ needed in Model_Pattern ??!?)
    1.16 +   <-?-> Input_Descript.thy
    1.17 +* WN: thy --> ctxt in by_Add_, ? I_Model.T_TEST ?
    1.18 +* WN: use fn in add_single
    1.19 +* WN: rename pat2str --> single_to_string
    1.20 +* WN: introduce typedecl toreallNOpar, toboollNOpar
    1.21 +      and remove HACK: before introduction typedecl toreallNOpar, toboollNOpar 
    1.22  * WN: reconsider design max_variants/_TEST
    1.23  * WN: (*/---with M_Model.match_itms_oris broken elementwise input to lists---\*)
    1.24        (*\---with M_Model.match_itms_oris broken elementwise input to lists---/*)
    1.25     several tests marked in Test_Isac.thy, which have out-comments.
    1.26 -   repair them together with all <broken elementwise input to lists>
    1.27 +   * repair them together with all <broken elementwise input to lists>
    1.28 +   * repair together with O_Model.to_string "(3, [\"1\", \"2\", \"3\"], #Find, AdditionalValues, [\"[u]\", \"[v]\"])"
    1.29  * WN: review PblObh {meth, ...}
    1.30    * fill early (Model_Problem?) with Inc []  presents input-templates
    1.31    * try to minimise user's contact with Method: 
    1.32 @@ -67,7 +83,7 @@
    1.33  * WN: ---broken elementwise input to lists---
    1.34  * WN: undetected ERROR in autoCalculate --- due to Post_Conds.check? (_OLD .. dispels ?)
    1.35  * WN: "review (descriptor, ts)"; ts : term list, because this supports element-wise input of lists.
    1.36 -  ts = [_] is determined by <Model_Pattern.is_list_descr descriptor>.
    1.37 +  ts = [_] is determined by <Pre_Conds.is_list_descr descriptor>.
    1.38    Thus, as long (descriptor, ts) is together, ts never contains <Const ("List.list.Cons", _)> --
    1.39    this holds for specify-phase internally, but not to the outside (presentation to user, transfer to solve-phase).
    1.40    TODO: shift this as comment to structure Model_Def, type o_model_single + referenced by datatype i_model_feedback.
     2.1 --- a/src/Tools/isac/BaseDefinitions/BaseDefinitions.thy	Sun Oct 29 07:14:14 2023 +0100
     2.2 +++ b/src/Tools/isac/BaseDefinitions/BaseDefinitions.thy	Thu Nov 16 08:15:46 2023 +0100
     2.3 @@ -65,6 +65,7 @@
     2.4  
     2.5  ML \<open>
     2.6  \<close> ML \<open>
     2.7 +
     2.8  \<close> ML \<open>
     2.9  \<close>
    2.10  end
     3.1 --- a/src/Tools/isac/BaseDefinitions/libraryC.sml	Sun Oct 29 07:14:14 2023 +0100
     3.2 +++ b/src/Tools/isac/BaseDefinitions/libraryC.sml	Thu Nov 16 08:15:46 2023 +0100
     3.3 @@ -67,6 +67,7 @@
     3.4    val string_to_bool: string -> bool
     3.5    val strs2str: string list -> string
     3.6    val strs2str': string list -> string
     3.7 +  val string_of_listNOpar: string list -> string
     3.8    val strs2str_: string list -> string                                 (* duplicates in Rule *)
     3.9    val strslist2strs: string list list -> string
    3.10  (*///------------------------------>>> Subst ----------------------------------------------\\\*)
    3.11 @@ -162,6 +163,7 @@
    3.12  
    3.13  fun strs2str strl = "[" ^ (commas (map quote strl)) ^ "]";
    3.14  fun strs2str' strl = "[" ^ commas strl ^ "]";
    3.15 +fun string_of_listNOpar strl = commas strl
    3.16  fun list2str strl = "[" ^ commas strl ^ "]";
    3.17  val nos = space_implode "#";
    3.18  fun strs2str_ strl = "#" ^ (nos strl) ^ "#";
     4.1 --- a/src/Tools/isac/BaseDefinitions/model-pattern.sml	Sun Oct 29 07:14:14 2023 +0100
     4.2 +++ b/src/Tools/isac/BaseDefinitions/model-pattern.sml	Thu Nov 16 08:15:46 2023 +0100
     4.3 @@ -21,6 +21,7 @@
     4.4  
     4.5    type m_field = string
     4.6    type descriptor = term
     4.7 +  type values
     4.8    val parse_pos: Proof.context -> (m_field * (string * Position.T) list) list ->
     4.9      pre_model * (term * Position.T) list
    4.10    val parse_pos_empty: Proof.context -> (m_field * (string * Position.T) list) list ->
    4.11 @@ -39,9 +40,11 @@
    4.12      | Proper of (m_field * (descriptor * term) * Position.T)
    4.13    val parse_pattern: Proof.context -> 'a * (string * Position.T) -> 'a * term * Position.T
    4.14  
    4.15 +  datatype descr_type = List of typ | Single of typ
    4.16 +  val descr_type: typ -> descr_type
    4.17    val typ_of_element: descriptor -> typ
    4.18 -  val is_list_descr: descriptor -> bool
    4.19    val empty_for: descriptor -> empty_input
    4.20 +
    4.21    val parse_term: Proof.context -> m_field * ((*TermC.as_*)string * Position.T) ->
    4.22      m_field * term * Position.T
    4.23    val parse_empty_input: Proof.context -> m_field * (string * Position.T) -> pre_model_single'
    4.24 @@ -60,6 +63,7 @@
    4.25  (* the pattern for an item of a problems model or a methods guard *)
    4.26  type m_field = string;
    4.27  type descriptor = term;
    4.28 +type values = term list;
    4.29  type single =
    4.30    (m_field *      (* field Given, Find, Relate / Where in Pre_Conds *)
    4.31  	  (descriptor * (* for term                                       *)
    4.32 @@ -80,8 +84,6 @@
    4.33    case descr_type (type_of descr) of
    4.34      List typ => typ
    4.35    | Single typ => typ
    4.36 -fun is_list_descr descr =
    4.37 -  case descr_type (type_of descr) of List _ => true | _ => false
    4.38  fun empty_for descr =
    4.39    case descr_type (type_of descr) of
    4.40      List typ => if typ = HOLogic.boolT then "[__=__, __=__]" else "[__, __]"
     5.1 --- a/src/Tools/isac/BaseDefinitions/termC.sml	Sun Oct 29 07:14:14 2023 +0100
     5.2 +++ b/src/Tools/isac/BaseDefinitions/termC.sml	Thu Nov 16 08:15:46 2023 +0100
     5.3 @@ -50,6 +50,7 @@
     5.4  
     5.5    val isalist2list: term -> term list
     5.6    val list2isalist: typ -> term list -> term
     5.7 +  val single_to_list: term -> term
     5.8    val isapair2pair: term -> term * term (* rename to dest_pair, compare HOLogic.dest_string *)
     5.9  
    5.10    val is_atom: term -> bool
    5.11 @@ -391,6 +392,10 @@
    5.12  fun list2isalist T [] = Const (\<^const_name>\<open>Nil\<close>, mk_listT T)
    5.13    | list2isalist T (t :: ts) = (list_const T) $ t $ (list2isalist T ts);
    5.14  
    5.15 +(*maps   [<a>, <b>, <c>]  to  [<[a]>, <[b]>, <[c]>]*)
    5.16 +fun single_to_list t = t |> single |> list2isalist (type_of t)
    5.17 +
    5.18 +
    5.19  fun isapair2pair (Const (\<^const_name>\<open>Pair\<close>,_) $ a $ b) = (a, b)
    5.20    | isapair2pair t = 
    5.21      raise TERM ("isapair2pair called with ", [t]);
     6.1 --- a/src/Tools/isac/BaseDefinitions/unparseC.sml	Sun Oct 29 07:14:14 2023 +0100
     6.2 +++ b/src/Tools/isac/BaseDefinitions/unparseC.sml	Thu Nov 16 08:15:46 2023 +0100
     6.3 @@ -16,6 +16,7 @@
     6.4    val term_opt: Proof.context -> term option -> term_as_string
     6.5  
     6.6    val terms: Proof.context -> term list -> term_as_string
     6.7 +  val terms_NObrack: Proof.context -> term list -> term_as_string
     6.8    val terms_in_thy: theory -> term list -> term_as_string
     6.9    val typ: Proof.context -> typ -> term_as_string
    6.10  
    6.11 @@ -38,6 +39,7 @@
    6.12      Print_Mode.setmp [] (Syntax.string_of_term ctxt') t
    6.13    end;
    6.14  fun terms ctxt ts = ts |> map (term ctxt) |> strs2str';
    6.15 +fun terms_NObrack ctxt ts = ts |> map (term ctxt) |> string_of_listNOpar;
    6.16  
    6.17  fun term_in_thy thy t = term (Proof_Context.init_global thy) t;
    6.18  fun terms_in_thy thy ts = ts |> map (term_in_thy thy) |> strs2str';
     7.1 --- a/src/Tools/isac/Build_Isac.thy	Sun Oct 29 07:14:14 2023 +0100
     7.2 +++ b/src/Tools/isac/Build_Isac.thy	Thu Nov 16 08:15:46 2023 +0100
     7.3 @@ -169,7 +169,7 @@
     7.4  (** )
     7.5  ( **)
     7.6  \<close> ML \<open>
     7.7 -
     7.8 +@{term Gleichungen}
     7.9  \<close> ML \<open>
    7.10  \<close> 
    7.11  subsection \<open>make Minisubpbl independent from Thy_Info\<close>
    7.12 @@ -181,10 +181,9 @@
    7.13    As next step we go bottom up from Thy_Info.get_theory and remove it.
    7.14    Afterwards $ISABELLE_ISAC_TEST will be changed accordingly.
    7.15  \<close>
    7.16 -(**) (* evaluated in Test_Isac/_Short *)
    7.17 +(** ) (* evaluated in Test_Isac/_Short *)
    7.18    ML_file "$ISABELLE_ISAC_TEST/Tools/isac/Minisubpbl/000-comments.sml"
    7.19 -(*ML_file "Minisubpbl/100-init-rootpbl-NEXT_STEP.sml" (*still in Test_Theory*)*)
    7.20 -  ML_file "$ISABELLE_ISAC_TEST/Tools/isac/Minisubpbl/100-init-rootpbl.sml"
    7.21 +  ML_file "$ISABELLE_ISAC_TEST/Tools/isac/Minisubpbl/100a-init-rootpbl-Maximum.sml"
    7.22    ML_file "$ISABELLE_ISAC_TEST/Tools/isac/Minisubpbl/150a-add-given-Maximum.sml"
    7.23    ML_file "$ISABELLE_ISAC_TEST/Tools/isac/Minisubpbl/150-add-given-Equation.sml"
    7.24    ML_file "$ISABELLE_ISAC_TEST/Tools/isac/Minisubpbl/200-start-method-NEXT_STEP.sml"
    7.25 @@ -208,6 +207,7 @@
    7.26    ML_file "$ISABELLE_ISAC_TEST/Tools/isac/Minisubpbl/800-append-on-Frm.sml"
    7.27  (**)                                          
    7.28    ML_file "$ISABELLE_ISAC_TEST/Tools/isac/Specify/i-model.sml"
    7.29 +(**)                                          
    7.30    ML_file "$ISABELLE_ISAC_TEST/Tools/isac/Specify/pre-conditions.sml"
    7.31  
    7.32    ML_file "$ISABELLE_ISAC_TEST/Tools/isac/BridgeJEdit/e-collect.sml"
    7.33 @@ -216,7 +216,7 @@
    7.34    ML_file "$ISABELLE_ISAC_TEST/Tools/isac/BridgeJEdit/preliminary.sml"
    7.35    ML_file "$ISABELLE_ISAC_TEST/Tools/isac/BridgeJEdit/calculation.sml"
    7.36    ML_file "$ISABELLE_ISAC_TEST/Tools/isac/BridgeJEdit/vscode-example.sml"
    7.37 -(**)                                          
    7.38 +( **)                                          
    7.39  
    7.40  (* evaluated in Test_Isac/_Short *)                               
    7.41  
    7.42 @@ -275,7 +275,7 @@
    7.43  \<close> ML \<open>
    7.44  
    7.45  \<close> ML \<open>
    7.46 -I_Model.TEST_to_OLD ;
    7.47 +I_Model.TEST_to_OLD  ;
    7.48  I_Model.OLD_to_TEST
    7.49  (*OLD*)
    7.50  (*---*)
    7.51 @@ -283,3 +283,10 @@
    7.52  \<close> ML \<open>
    7.53  \<close>
    7.54  end
    7.55 +
    7.56 +
    7.57 +
    7.58 +
    7.59 +
    7.60 +
    7.61 +
     8.1 --- a/src/Tools/isac/Knowledge/Biegelinie.thy	Sun Oct 29 07:14:14 2023 +0100
     8.2 +++ b/src/Tools/isac/Knowledge/Biegelinie.thy	Thu Nov 16 08:15:46 2023 +0100
     8.3 @@ -56,7 +56,7 @@
     8.4    RandbedingungenQuerkraft :: "bool list => una"
     8.5    FunktionsVariable        :: "real => una"
     8.6    Funktionen               :: "bool list => una"
     8.7 -  Gleichungen              :: "bool list => una"
     8.8 +  Gleichungen              :: "bool list => una" (*\<longrightarrow> Input_Descript.thy: known by fun is_NObrack_list*)
     8.9    GleichungsVariablen      :: "real list => una"
    8.10  
    8.11  
     9.1 --- a/src/Tools/isac/Knowledge/EqSystem.thy	Sun Oct 29 07:14:14 2023 +0100
     9.2 +++ b/src/Tools/isac/Knowledge/EqSystem.thy	Thu Nov 16 08:15:46 2023 +0100
     9.3 @@ -13,7 +13,7 @@
     9.4  
     9.5    (*descriptions in the related problems*)
     9.6    solveForVars       :: "real list => toreall"
     9.7 -  solution           :: "bool list => toreall"
     9.8 +solution           :: "bool list => toreall" (*\<longrightarrow> Input_Descript.thy: known by fun is_NObrack_list*)
     9.9  
    9.10    (*the CAS-command, eg. "solveSystem [x+y=1,y=2] [x,y]"*)
    9.11    solveSystem        :: "[bool list, real list] => bool list"
    10.1 --- a/src/Tools/isac/MathEngBasic/model-def.sml	Sun Oct 29 07:14:14 2023 +0100
    10.2 +++ b/src/Tools/isac/MathEngBasic/model-def.sml	Thu Nov 16 08:15:46 2023 +0100
    10.3 @@ -38,10 +38,10 @@
    10.4      | Mis of (term * term) 
    10.5      | Par of TermC.as_string
    10.6    datatype i_model_feedback_TEST = 
    10.7 -      Cor_TEST of (descriptor * (term list))
    10.8 +      Cor_TEST of (descriptor * values)
    10.9      | Syn_TEST of TermC.as_string 
   10.10 -    | Inc_TEST of (descriptor * (term list))
   10.11 -    | Sup_TEST of (descriptor * (term list)) 
   10.12 +    | Inc_TEST of (descriptor * values)
   10.13 +    | Sup_TEST of (descriptor * values) 
   10.14    val feedback_empty_TEST: i_model_feedback_TEST
   10.15  
   10.16    val i_model_empty : i_model_single
   10.17 @@ -79,7 +79,7 @@
   10.18  
   10.19  type variant = int;
   10.20  type variants = variant list; (* variants given by Formalise.T *)
   10.21 -type values = term list;
   10.22 +type values = Model_Pattern.values;
   10.23  
   10.24  (** definitions for I_Model.T **)
   10.25  
   10.26 @@ -173,12 +173,12 @@
   10.27  *)
   10.28  fun max_variants o_model i_model =
   10.29    let
   10.30 -(*OLD*)
   10.31 +(*OLD-postpone to ---^^^ non-empty items*)
   10.32      val all_variants =
   10.33          map (fn (_, variants, _, _, _) => variants) i_model
   10.34          |> flat
   10.35          |> distinct op =
   10.36 -(*---* )
   10.37 +(*---* )(*postpone to ---^^^*)
   10.38      val all_variants = (*we do not count empty items (not yet input)*)
   10.39          map (fn (_, _, _, _, (Inc_TEST (_, []), _)) => []
   10.40            | (_, variants, _, _, _) => variants) i_model
    11.1 --- a/src/Tools/isac/MathEngine/step.sml	Sun Oct 29 07:14:14 2023 +0100
    11.2 +++ b/src/Tools/isac/MathEngine/step.sml	Thu Nov 16 08:15:46 2023 +0100
    11.3 @@ -82,7 +82,7 @@
    11.4      | _ => raise ERROR "switch_specify_solve: uncovered case in fun.def."
    11.5    end
    11.6  
    11.7 -(* does a step forward; returns tactic used, ctree updated (i.e. with NEW term/calchead) *)
    11.8 +(* does a step forward; returns tactic used, ctree updated (i.e. with NEW term/Specification) *)
    11.9  fun do_next (ip as (_, p_)) (ptp as (pt, p), tacis) =
   11.10    if Pos.on_calc_end ip then
   11.11      ("end-of-calculation", (tacis, [], ptp): Calc.state_post) 
    12.1 --- a/src/Tools/isac/Specify/Input_Descript.thy	Sun Oct 29 07:14:14 2023 +0100
    12.2 +++ b/src/Tools/isac/Specify/Input_Descript.thy	Thu Nov 16 08:15:46 2023 +0100
    12.3 @@ -59,7 +59,8 @@
    12.4    relations      :: "bool list => una"
    12.5    SideConditions :: "bool list => una"
    12.6    solutions      :: "bool list => toreall"
    12.7 -(*solution       :: bool => toreal  WN0509 bool list=> toreall --->EqSystem*)
    12.8 +(*Gleichungen    :: "bool list => toreall" MUST be here to beknown by fun is_NObrack_list <--Biegelinie*)
    12.9 +(*solution       :: "bool => toreal"       WN0509 bool list => toreall <--EqSystem*)
   12.10    solveFor       :: "real => una"
   12.11    differentiateFor:: "real => una"
   12.12    unknown        :: "'a => unknow"
    13.1 --- a/src/Tools/isac/Specify/i-model.sml	Sun Oct 29 07:14:14 2023 +0100
    13.2 +++ b/src/Tools/isac/Specify/i-model.sml	Thu Nov 16 08:15:46 2023 +0100
    13.3 @@ -36,8 +36,10 @@
    13.4  
    13.5    val single_to_string: Proof.context -> single -> string
    13.6    val single_to_string_TEST: Proof.context -> single_TEST -> string
    13.7 +  val single_to_string_TEST': single_TEST -> string
    13.8    val to_string: Proof.context -> T -> string
    13.9    val to_string_TEST: Proof.context -> T_TEST -> string
   13.10 +
   13.11    val feedback_OLD_to_TEST: feedback -> feedback_TEST
   13.12  
   13.13    datatype add_single = Add of single | Err of string
   13.14 @@ -51,15 +53,23 @@
   13.15    val descriptor: feedback -> descriptor
   13.16    val descriptor_TEST: feedback_TEST -> descriptor
   13.17    val values: feedback -> values option
   13.18 -  val values_TEST: feedback_TEST -> values option
   13.19 +  val o_model_values: feedback -> values
   13.20 +  val values_TEST': feedback_TEST -> values
   13.21    val descr_pairs_to_string: Proof.context -> (Model_Pattern.single * single_TEST) list -> string
   13.22 -  val o_model_values: feedback -> O_Model.values
   13.23    val variables: Model_Pattern.T -> Model_Def.i_model_TEST -> term list
   13.24    val is_notyet_input : Proof.context -> T -> O_Model.values -> O_Model.single -> Model_Pattern.T
   13.25      -> message * single
   13.26    val get_field_term: theory -> O_Model.single -> single -> m_field * TermC.as_string
   13.27  
   13.28    val add: single -> T -> T
   13.29 +(*OLD* )
   13.30 +  val handle_atom: values -> values
   13.31 +( *---*)
   13.32 +  val unpack_values: descriptor * values -> values
   13.33 +  val fill_from_o: O_Model.T -> single_TEST -> single_TEST option
   13.34 +(*NEW*)
   13.35 +
   13.36 +
   13.37    val add_other: variant -> T_TEST -> single_TEST -> single_TEST
   13.38    val fill_method: O_Model.T -> T_TEST * T_TEST-> Model_Pattern.T -> T_TEST
   13.39    val s_make_complete: Proof.context ->  O_Model.T -> T_TEST * T_TEST -> Problem.id * MethodC.id ->
   13.40 @@ -74,9 +84,15 @@
   13.41  
   13.42    val eq1: ''a -> 'b * (''a * 'c) -> bool
   13.43    val feedback_to_string: Proof.context -> feedback -> string
   13.44 +(*OLD* )
   13.45 +  val feedback_NEW_to_string: Proof.context -> feedback_TEST -> string
   13.46 +( *---*)
   13.47    val feedback_TEST_to_string: Proof.context -> feedback_TEST -> string
   13.48 +  val descr_vals_to_string: Proof.context -> descriptor * values -> string
   13.49 +  val feedb_args_to_string: Proof.context -> feedback_TEST -> string
   13.50 +(*NEW*)
   13.51  
   13.52 -  val ori_2itm: feedback -> descriptor -> Model_Def.values -> O_Model.single -> single
   13.53 +  val ori_2itm: feedback -> descriptor -> Model_Pattern.values -> O_Model.single -> single
   13.54    val seek_ppc: int -> T -> single option
   13.55    val overwrite_ppc: theory -> single -> T -> T
   13.56  (*\----- from isac_test for Minisubpbl*)
   13.57 @@ -99,7 +115,7 @@
   13.58  type variants =  Model_Def.variants;
   13.59  type m_field = Model_Def.m_field;
   13.60  type descriptor = Model_Def.descriptor;
   13.61 -type values = Model_Def.values
   13.62 +type values = Model_Pattern.values
   13.63  
   13.64  type T = Model_Def.i_model_single list;
   13.65  (* for developing input from PIDE, we use T_TEST with these ideas:
   13.66 @@ -157,7 +173,6 @@
   13.67      "Mis " ^ UnparseC.term  ctxt d ^ " " ^ UnparseC.term ctxt pid
   13.68    | feedback_to_string _ (Par s) = "Trm "^s;
   13.69  
   13.70 -(**)
   13.71  fun feedback_TEST_to_string ctxt (Cor_TEST (d, ts)) = 
   13.72      "Cor_TEST " ^ UnparseC.term ctxt (Input_Descript.join (d, ts)) ^ " , pen2str"
   13.73    | feedback_TEST_to_string _ (Syn_TEST c) =
   13.74 @@ -170,12 +185,32 @@
   13.75    | feedback_TEST_to_string ctxt (Sup_TEST (d, ts)) = 
   13.76      "Sup_TEST " ^ UnparseC.term ctxt (Input_Descript.join (d, ts))
   13.77  
   13.78 +fun descr_vals_to_string ctxt (descr, values) =
   13.79 +    if Pre_Conds.is_list_descr descr
   13.80 +    then if Pre_Conds.is_NObrack_list descr values
   13.81 +      then UnparseC.term ctxt descr ^ " " ^ UnparseC.terms_NObrack ctxt values
   13.82 +      else UnparseC.term ctxt descr ^ " " ^ UnparseC.terms(*_NObrack*) ctxt values(* ^ "]"*)
   13.83 +    else if TermC.is_atom (hd values)
   13.84 +      then UnparseC.term ctxt descr ^ " " ^ UnparseC.term ctxt (hd values)
   13.85 +      else UnparseC.term ctxt descr ^ " (" ^ UnparseC.term ctxt (hd values) ^ ")"
   13.86 +
   13.87 +(*prepare for presentation to user; thus Syn_TEST does NOT raise an exn*)
   13.88 +fun feedb_args_to_string ctxt (Cor_TEST (descr, values)) = descr_vals_to_string ctxt (descr, values)
   13.89 +  | feedb_args_to_string _ (Syn_TEST str) = str
   13.90 +  | feedb_args_to_string ctxt (Inc_TEST (descr, [])) =
   13.91 +    UnparseC.term ctxt descr ^ Model_Pattern.empty_for descr
   13.92 +  | feedb_args_to_string ctxt (Inc_TEST (descr, values)) = descr_vals_to_string ctxt (descr, values)
   13.93 +  | feedb_args_to_string ctxt (Sup_TEST (descr, values)) = descr_vals_to_string ctxt (descr, values)
   13.94 +
   13.95  fun single_to_string ctxt (i, is, b, s, itm_) = 
   13.96    "(" ^ string_of_int i ^ " ," ^ ints2str' is ^ " ," ^ bool2str b ^ " ," ^
   13.97    s ^ " ," ^ feedback_to_string ctxt itm_ ^ ")";
   13.98  fun single_to_string_TEST ctxt (i, is, b, s, (itm_, _(*Position.T*))) = 
   13.99    "(" ^ string_of_int i ^ ", " ^ ints2str' is ^ ", " ^ bool2str b ^ " ," ^
  13.100    s ^ ", (" ^ feedback_TEST_to_string ctxt itm_ ^ ", Position.T))";
  13.101 +fun single_to_string_TEST' (i, is, b, s, (itm_, _(*Position.T*))) = 
  13.102 +  "(" ^ string_of_int i ^ ", " ^ ints2str' is ^ ", " ^ bool2str b ^ " ," ^
  13.103 +  s ^ ", (" ^ feedback_TEST_to_string (ContextC.for_ERROR ()) itm_ ^ ", Position.T))";
  13.104  
  13.105  fun to_string ctxt itms = strs2str' (map (linefeed o (single_to_string ctxt)) itms);
  13.106  fun to_string_TEST ctxt itms = strs2str' (map (linefeed o (single_to_string_TEST ctxt)) itms);
  13.107 @@ -219,13 +254,6 @@
  13.108      O_Model.add_enumerate pre_items |> map (fn (a, (b, c, d, e)) => (a, b, c, d, e))
  13.109    end
  13.110  
  13.111 -fun o_model_values (Cor ((_, ts), _)) = ts
  13.112 -  | o_model_values (Syn _) = []
  13.113 -  | o_model_values (Typ _) = []
  13.114 -  | o_model_values (Inc ((_, ts), _)) = ts
  13.115 -  | o_model_values (Sup (_, ts)) = ts
  13.116 -  | o_model_values (Mis _) = []
  13.117 -  | o_model_values _ = raise ERROR "o_model_values: uncovered case in fun.def.";
  13.118  
  13.119  val unique = Syntax.read_term\<^context> "UnIqE_tErM";
  13.120  fun descriptor (Cor ((d ,_), _)) = d
  13.121 @@ -247,10 +275,17 @@
  13.122    | values (Sup (_, ts)) = SOME ts
  13.123    | values (Mis (_, t)) = SOME [t]
  13.124    | values _ = raise ERROR "descriptor: uncovered case in fun.def.";
  13.125 -fun values_TEST (Cor_TEST (_, ts)) = SOME ts
  13.126 -  | values_TEST (Syn_TEST _) = NONE
  13.127 -  | values_TEST (Inc_TEST (_, ts)) = SOME ts
  13.128 -  | values_TEST (Sup_TEST (_, ts)) = SOME ts
  13.129 +fun o_model_values (Cor ((_, ts), _)) = ts
  13.130 +  | o_model_values (Syn _) = []
  13.131 +  | o_model_values (Typ _) = []
  13.132 +  | o_model_values (Inc ((_, ts), _)) = ts
  13.133 +  | o_model_values (Sup (_, ts)) = ts
  13.134 +  | o_model_values (Mis _) = []
  13.135 +  | o_model_values _ = raise ERROR "o_model_values: uncovered case in fun.def.";
  13.136 +fun values_TEST' (Cor_TEST (_, ts)) = ts
  13.137 +  | values_TEST' (Syn_TEST _) = raise ERROR "values_TEST' NOT for Syn_TEST"
  13.138 +  | values_TEST' (Inc_TEST (_, ts)) = ts
  13.139 +  | values_TEST' (Sup_TEST (_, ts)) = ts
  13.140  
  13.141  fun descr_pairs_to_string ctxt equal_descr_pairs =
  13.142  (map (fn (a, b) => pair (Model_Pattern.pat2str ctxt a) (single_to_string_TEST ctxt b)
  13.143 @@ -402,7 +437,7 @@
  13.144  fun seek_ppc _ [] = NONE
  13.145    | seek_ppc id (p :: model) = if id = #1 (p: single) then SOME p else seek_ppc id model
  13.146  
  13.147 -(* 10.3.00: insert the already compiled itm into model;
  13.148 +(* 10.3.00: insert the parsed itm into model;
  13.149     ev. filter_out  untouched (in FE: (0,...)) item related to insert-item *)
  13.150  fun add_single thy itm model =
  13.151    let 
  13.152 @@ -443,6 +478,7 @@
  13.153    | is_error (Mis _) = false
  13.154    | is_error _ = true
  13.155  
  13.156 +(*OLD*)
  13.157  (*create output-string for itm*)
  13.158  fun to_p_model thy (Cor ((d, ts), _)) = UnparseC.term_in_thy thy (Input_Descript.join (d, ts))
  13.159    | to_p_model _ (Syn c) = c
  13.160 @@ -451,12 +487,62 @@
  13.161    | to_p_model thy (Sup (d, ts)) = UnparseC.term_in_thy thy (Input_Descript.join (d, ts))
  13.162    | to_p_model thy (Mis (d, pid)) = UnparseC.term_in_thy thy d ^ " " ^ UnparseC.term_in_thy thy pid
  13.163    | to_p_model _ _ = raise ERROR "to_p_model: uncovered definition"
  13.164 +(*---*)
  13.165 +(*see feedback_NEW_to_string, descr_vals_to_string*)
  13.166 +(*NEW*)
  13.167  
  13.168 +(*OLD* )
  13.169 +fun handle_atom [t] = [t]
  13.170 +  | handle_atom ts = [TermC.list2isalist (type_of (hd ts)) ts]
  13.171 +( *---*)
  13.172 +(*
  13.173 +  atoms like Solutions (L::bool list);
  13.174 +  precondition: arguments are of type list; according to type of descriptor
  13.175 +*)
  13.176 +fun handle_atom [t] = [t]
  13.177 +  | handle_atom ts = ts |> map TermC.isalist2list |> flat
  13.178 +(*NEW*)
  13.179 +
  13.180 +(*OLD*)
  13.181 +(*---*)
  13.182 +fun unpack_values (descr, [t]) =
  13.183 +    if Pre_Conds.is_list_descr descr
  13.184 +    then if Pre_Conds.is_NObrack_list descr [(*TODO drop this argument*)]
  13.185 +      then [t]
  13.186 +      else t |> TermC.isalist2list
  13.187 +    else [t]
  13.188 +  | unpack_values (_, ts) = ts |> map TermC.isalist2list |> flat
  13.189 +(*NEW*)
  13.190 +
  13.191 +(*OLD*)
  13.192  fun eq_dsc ((_, _, _, _, itm_), (_, _, _, _, iitm_)) = (descriptor itm_ = descriptor iitm_)
  13.193 -
  13.194  (* insert_ppc = add for appl_add', input_icalhd 11.03,
  13.195     handles superfluous items carelessly                       *)
  13.196 +(*---*)
  13.197  fun add itm itms = if member eq_dsc itms itm then itms else itms @ [itm] (* @ new itm *)
  13.198 +fun fill_from_o o_model (i, vnts, bool, _, (feedb, pos)) = 
  13.199 +  let
  13.200 +    val (m_field, all_value) =
  13.201 +      case find_first (fn (_, _, _, descr', _) => Pre_Conds.descriptor_exists descr' feedb) o_model of
  13.202 +        SOME (_, _, m_field, _, ts) =>  (m_field, ts)
  13.203 +      | NONE => raise ERROR "I_Model.fill_from_o does NOT find a descriptor in O_Model"
  13.204 +    val descr = Pre_Conds.get_dscr'' feedb (*i_single has been filtered appropriately*)
  13.205 +  in
  13.206 +    if Pre_Conds.is_list_descr descr
  13.207 +    then
  13.208 +      let
  13.209 +        val all_value' = unpack_values (descr, all_value)
  13.210 +        val already_input = feedb |> values_TEST' |> map TermC.isalist2list |> flat
  13.211 +        val miss = subtract op= already_input all_value'
  13.212 +        val present = already_input @ [hd miss]
  13.213 +      in
  13.214 +        if length all_value' = length present
  13.215 +        then SOME (i, vnts, bool, m_field, (Cor_TEST (descr, present), pos))
  13.216 +        else SOME (i, vnts, bool, m_field, (Inc_TEST (descr, present), pos))
  13.217 +      end
  13.218 +    else SOME (i, vnts, bool, m_field, (Cor_TEST (descr, all_value), pos))
  13.219 +  end
  13.220 +(*NEW*)
  13.221  
  13.222  (*
  13.223    in case there is an item in i2_model(= met) with Sup_TEST, 
    14.1 --- a/src/Tools/isac/Specify/m-match.sml	Sun Oct 29 07:14:14 2023 +0100
    14.2 +++ b/src/Tools/isac/Specify/m-match.sml	Thu Nov 16 08:15:46 2023 +0100
    14.3 @@ -22,14 +22,9 @@
    14.4      bool * (I_Model.T * Pre_Conds.T)    (*^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v--- type*)
    14.5  (*val o_i_model: O_Model.T * I_Model.T -> Model_Pattern.T * term list * Rule_Set.T -> theory ->
    14.6      bool * (I_Model.T * Pre_Conds.T)             (*?values--^^^^^^^^^?*)*)
    14.7 -(*OLD* )
    14.8 -  val match_itms_oris: theory -> I_Model.T -> Model_Pattern.T * term list * Rule_Set.T ->
    14.9 -    O_Model.T -> bool * (I_Model.T * Pre_Conds.T)
   14.10 -( *---*)
   14.11    val match_itms_oris: Proof.context -> O_Model.T -> I_Model.T_TEST * I_Model.T_TEST ->
   14.12      Model_Pattern.T * Pre_Conds.unchecked * Rule_Def.rule_set ->
   14.13        bool * (I_Model.T_TEST * Pre_Conds.T)
   14.14 -(*NEW*)
   14.15  
   14.16  (*val arguments: theory -> Model_Pattern.T -> term list -> O_Model.T*)
   14.17    val arguments: theory -> Model_Pattern.T -> term list -> O_Model.T
    15.1 --- a/src/Tools/isac/Specify/o-model.sml	Sun Oct 29 07:14:14 2023 +0100
    15.2 +++ b/src/Tools/isac/Specify/o-model.sml	Thu Nov 16 08:15:46 2023 +0100
    15.3 @@ -76,7 +76,7 @@
    15.4  type variants =  Model_Def.variants;
    15.5  type m_field = Model_Def.m_field;
    15.6  type descriptor = Model_Def.descriptor;
    15.7 -type values = Model_Def.values;
    15.8 +type values = Model_Pattern.values;
    15.9  type message = string;
   15.10  
   15.11  type T = Model_Def.o_model;
    16.1 --- a/src/Tools/isac/Specify/pre-conditions.sml	Sun Oct 29 07:14:14 2023 +0100
    16.2 +++ b/src/Tools/isac/Specify/pre-conditions.sml	Thu Nov 16 08:15:46 2023 +0100
    16.3 @@ -40,6 +40,10 @@
    16.4    val unchecked_OLD_to_TEST: term list -> (term * Position.T) list
    16.5  
    16.6    val all_lhs_atoms: term list -> bool
    16.7 +(*/------- \<longrightarrow> pre-conditions*)
    16.8 +  val is_list_descr: Model_Pattern.descriptor -> bool
    16.9 +  val is_NObrack_list: Model_Pattern.descriptor -> Model_Pattern.values -> bool
   16.10 +(*\------- \<longrightarrow> pre-conditions*)
   16.11    val handle_lists: term -> Model_Def.descriptor * term list -> Env.T;
   16.12    val filter_variants': Model_Def.i_model_TEST -> Model_Def.variant -> Model_Def.i_model_TEST
   16.13    val switch_type: Model_Def.descriptor -> term list -> Model_Def.descriptor;
   16.14 @@ -57,6 +61,8 @@
   16.15      Model_Def.i_model_single_TEST
   16.16    val get_descr_vnt': Model_Def.i_model_feedback_TEST -> Model_Def.variants -> O_Model.T ->
   16.17      O_Model.T
   16.18 +  val get_dscr'': Model_Def.i_model_feedback_TEST -> Model_Pattern.descriptor
   16.19 +  val descriptor_exists: Model_Pattern.descriptor -> Model_Def.i_model_feedback_TEST -> bool
   16.20  (*\----- from isac_test for Minisubpbl*)
   16.21  
   16.22  \<^isac_test>\<open>
   16.23 @@ -162,6 +168,19 @@
   16.24        (map (pair m_patt_single) equal_descr)
   16.25      end
   16.26  
   16.27 +(*OLD*)
   16.28 +(*---*)
   16.29 +fun descriptor_exists descr feedb =
   16.30 +  case get_dscr' feedb of
   16.31 +    SOME descr' => descr' = descr
   16.32 +  | NONE => raise ERROR "existing_description NONE"
   16.33 +(*in case descriptor exists in this item*)
   16.34 +fun get_dscr'' (Cor_TEST (descr, _)) =  descr
   16.35 +  | get_dscr'' (Inc_TEST (descr, _)) =  descr
   16.36 +  | get_dscr'' (Sup_TEST (descr, _)) =  descr
   16.37 +  | get_dscr'' _ = raise ERROR "get_dscr'' from item without this description"
   16.38 +(*NEW*)
   16.39 +
   16.40  (*
   16.41    get an appropriate (description, variant)-item from i_model, otherwise return empty item,
   16.42    i.e. this function produces items with Sup.
   16.43 @@ -192,8 +211,31 @@
   16.44    then TermC.is_atom (TermC.lhs t)
   16.45    else false) ts) true
   16.46  
   16.47 +(*/------- \<longrightarrow> pre-conditions*)
   16.48 +fun is_list_descr descr =
   16.49 +  case Model_Pattern.descr_type (type_of descr) of Model_Pattern.List _ => true | _ => false
   16.50 +(*OLD* )
   16.51 +fun is_NObrack_list descr values =
   16.52 +  (*HACK: before introduction typedecl toreallNOpar, toboollNOpar*)
   16.53 +  let
   16.54 +    val (*maximum- example*)(max_descr, max_values) =
   16.55 +      (@{term AdditionalValues}, [@{term "u::real"}, @{term "v::real"}])
   16.56 +    val (*begelinien- example 7.70*)(bieg_descr, bieg_values) =
   16.57 +      (@{term Randbedingungen}, 
   16.58 +       [@{term "(y::real \<Rightarrow> real) 0 = (0::real)"}, @{term "(y::real \<Rightarrow> real) L = (0::real)"},
   16.59 +         @{term "M_b 0 = (0::real)"}, @{term "M_b L = (0::real)"}])
   16.60 +  in
   16.61 +    not
   16.62 +      ((descr = max_descr andalso subset op= (values, max_values)) orelse
   16.63 +       (descr = bieg_descr andalso subset op= (values, bieg_values)))
   16.64 +  end
   16.65 +( *---*)
   16.66 +fun is_NObrack_list descr _ =
   16.67 +  (*HACK: before introduction typedecl toreallNObrack, toboollNObrack*)
   16.68 +  descr = @{term solutions} orelse descr = @{term solution} orelse descr = @{term Gleichungen}
   16.69 +
   16.70  fun handle_lists id (descr, ts) =
   16.71 -  if Model_Pattern.is_list_descr descr
   16.72 +  if is_list_descr descr
   16.73    then if length ts > 1         (*list with more than 1 element needs to collect by [.., .., ..]*)
   16.74      then if TermC.is_list (hd ts) (*---broken elementwise input to lists---*)
   16.75        then [(id, TermC.list2isalist (Model_Pattern.typ_of_element descr) (map TermC.the_single ts))]
   16.76 @@ -226,7 +268,7 @@
   16.77    | discern_typ id (descr, ts) =
   16.78  (*TODO.md "review (descriptor, ts)" REMOVE--------------------------------------\*)
   16.79      let
   16.80 -      val ts = if Model_Pattern.is_list_descr descr
   16.81 +      val ts = if is_list_descr descr
   16.82          then if TermC.is_list (hd ts)
   16.83            then ts |> map TermC.isalist2list |> flat
   16.84            else ts
    17.1 --- a/src/Tools/isac/Specify/specify-step.sml	Sun Oct 29 07:14:14 2023 +0100
    17.2 +++ b/src/Tools/isac/Specify/specify-step.sml	Thu Nov 16 08:15:46 2023 +0100
    17.3 @@ -9,11 +9,7 @@
    17.4  sig
    17.5    val check: Tactic.input -> Calc.T -> Applicable.T
    17.6    val add: Tactic.T -> Istate_Def.T * Proof.context -> Calc.T -> Test_Out.T
    17.7 -(*OLD* )
    17.8 -  val complete_for: MethodC.id -> Calc.T -> O_Model.T * Proof.context * I_Model.T
    17.9 -( *---*)
   17.10    val complete_for: MethodC.id -> Calc.T -> O_Model.T * Proof.context * I_Model.T_TEST
   17.11 -(*NEW*)
   17.12  end
   17.13  
   17.14  (**)
   17.15 @@ -23,17 +19,6 @@
   17.16  
   17.17  fun complete_for mID (ctree, pos) =
   17.18    let
   17.19 -(*OLD* )
   17.20 -    val {origin = (o_model, _, _), probl = i_prob, ctxt,
   17.21 -       ...} = Calc.specify_data (ctree, pos);
   17.22 -    val {model = m_patt, where_, where_rls, ...} = MethodC.from_store ctxt mID
   17.23 -    val {origin = (root_model, _, _), ...} = Calc.specify_data (ctree, ([], Pos.Und))
   17.24 -    val (o_model', ctxt') = O_Model.complete_for m_patt root_model (o_model, ctxt)
   17.25 -    val (_, (i_model, _)) = M_Match.match_itms_oris ctxt i_prob (m_patt, where_, where_rls) o_model';
   17.26 -  in
   17.27 -    (o_model', ctxt', i_model)
   17.28 -  end
   17.29 -( *---*)
   17.30      val {origin = (o_model, o_refs, _), spec = refs, probl = i_prob, meth = met_imod, ctxt,
   17.31         ...} = Calc.specify_data (ctree, pos);
   17.32      val ctxt = Ctree.get_ctxt ctree pos
   17.33 @@ -46,7 +31,6 @@
   17.34    in
   17.35      (o_model', ctxt', i_model)
   17.36    end
   17.37 -(*NEW*)
   17.38  
   17.39  (*
   17.40    check tactics (input by the user, mostly) for applicability
   17.41 @@ -110,16 +94,10 @@
   17.42  		        => (oris,  pI,  pI', probl, meth, ctxt)
   17.43          | _ => raise ERROR "Specify_Step.check Specify_Problem: uncovered case Ctree.get_obj"
   17.44          val {model, where_, where_rls, ...} = Problem.from_store (Ctree.get_ctxt pt pos) pID;
   17.45 -(*OLD* )
   17.46 -        val pbl = if pI' = Problem.id_empty andalso pI = Problem.id_empty
   17.47 -          then (false, (I_Model.init model, []))
   17.48 -          else M_Match.match_itms_oris ctxt itms (model, where_, where_rls) oris;
   17.49 -( *---*)
   17.50          val (check, (i_model, preconds)) = if pI' = Problem.id_empty andalso pI = Problem.id_empty
   17.51            then (false, (I_Model.OLD_to_TEST (I_Model.init model), []))
   17.52            else M_Match.match_itms_oris ctxt oris
   17.53              (I_Model.OLD_to_TEST probl, I_Model.OLD_to_TEST meth) (model, where_, where_rls)
   17.54 -(*NEW*)
   17.55         in
   17.56           Applicable.Yes (Tactic.Specify_Problem' (pID, (check, (I_Model.TEST_to_OLD i_model, preconds))))
   17.57         end
    18.1 --- a/src/Tools/isac/Specify/specify.sml	Sun Oct 29 07:14:14 2023 +0100
    18.2 +++ b/src/Tools/isac/Specify/specify.sml	Thu Nov 16 08:15:46 2023 +0100
    18.3 @@ -7,14 +7,25 @@
    18.4    val do_all: Calc.T -> Calc.T 
    18.5    val finish_phase: Calc.T -> Calc.T
    18.6  
    18.7 +(*OLD* )
    18.8    val item_to_add: theory -> O_Model.T -> Model_Pattern.T -> I_Model.T ->
    18.9      (Model_Def.m_field * TermC.as_string) option
   18.10 +( *---*)
   18.11 +  val item_to_add: Proof.context -> O_Model.T -> I_Model.T_TEST -> 
   18.12 +    (Model_Def.m_field * TermC.as_string) option
   18.13 +(*NEW*)
   18.14    val by_Add_: string -> TermC.as_string -> Calc.T -> string * Calc.state_post
   18.15  (*from isac_test for Minisubpbl*)
   18.16 +(*OLD* )
   18.17    val for_problem: Proof.context -> O_Model.T -> References.T * References.T -> I_Model.T * I_Model.T ->
   18.18      string * (Pos.pos_ * Tactic.input)
   18.19 +( *---*)
   18.20 +  val for_problem: Proof.context -> O_Model.T -> References.T * References.T -> I_Model.T * I_Model.T_TEST ->
   18.21 +    string * (Pos.pos_ * Tactic.input)
   18.22 +(*NEW*)
   18.23    val for_method: Proof.context -> O_Model.T -> References.T * References.T -> I_Model.T * I_Model.T ->
   18.24      string * (Pos.pos_ * Tactic.input)
   18.25 +  val select_inc_lists: I_Model.T_TEST -> I_Model.T_TEST
   18.26  
   18.27  \<^isac_test>\<open>
   18.28  (**)
   18.29 @@ -26,6 +37,15 @@
   18.30  struct
   18.31  (**)
   18.32  
   18.33 +fun select_inc_lists i_model =
   18.34 +  let
   18.35 +    (* filter problem with Const ("Input_Descript.solutions", _) *)
   18.36 +    val filt = (fn (_, _, _, _, (I_Model.Inc_TEST (descr, _::_) , _)) => Pre_Conds.is_list_descr descr
   18.37 +      | _ => false)
   18.38 +  in
   18.39 +    (filter filt i_model) @ (filter_out filt i_model)
   18.40 +  end
   18.41 +(*OLD* )
   18.42  (*
   18.43    select an item in oris, notyet input in itms 
   18.44    (precondition: in itms are only I_Model.Cor, I_Model.Sup, I_Model.Inc)
   18.45 @@ -73,6 +93,35 @@
   18.46            NONE => raise ERROR "item_to_add: types or dsc DO NOT MATCH BETWEEN fmz --- pbt"
   18.47          | SOME ori => SOME (I_Model.get_field_term thy ori (hd icl))
   18.48      end
   18.49 +( *---*)
   18.50 +fun item_to_add ctxt o_model i_model =
   18.51 +  let
   18.52 +    val max_vnt = last_elem (*this decides, for which variant initially help is given*)
   18.53 +      (Model_Def.max_variants o_model i_model)
   18.54 +    val o_vnts = filter (fn (_, vnts, _, _, _) => member op= vnts max_vnt) o_model
   18.55 +    val i_to_select = i_model
   18.56 +      |> filter_out (fn (_, vnts, _, _, (I_Model.Cor_TEST _, _)) => member op= vnts max_vnt | _ => false)
   18.57 +      |> select_inc_lists
   18.58 +(*OLD* )
   18.59 +      |> hd
   18.60 +  in
   18.61 +    case I_Model.fill_from_o o_vnts i_to_select of
   18.62 +      SOME (_, _, _, m_field, (feedb, _)) =>
   18.63 +        SOME (m_field, feedb |> I_Model.feedb_args_to_string ctxt)
   18.64 +    | NONE => raise ERROR "item_to_add: NONE not.impl."
   18.65 +  end
   18.66 +( *---*)
   18.67 +(** ) |> hd( **)
   18.68 +  in
   18.69 +    if i_to_select = [] then NONE
   18.70 +    else
   18.71 +      case I_Model.fill_from_o o_vnts (hd i_to_select) of
   18.72 +        SOME (_, _, _, m_field, (feedb, _)) =>
   18.73 +          SOME (m_field, feedb |> I_Model.feedb_args_to_string ctxt)
   18.74 +      | NONE => raise ERROR "item_to_add: NONE not.impl."
   18.75 +  end
   18.76 +(*NEW*)
   18.77 +(*NEW*)
   18.78  
   18.79  
   18.80  (** find a next step in the specify-phase **)
   18.81 @@ -92,13 +141,17 @@
   18.82      else if pI' = Problem.id_empty andalso pI = Problem.id_empty then
   18.83          ("dummy", (Pos.Pbl, Tactic.Specify_Problem pI'))
   18.84      else
   18.85 -      case find_first (I_Model.is_error o #5) pbl of
   18.86 +      case find_first (fn (_, _, _, _, feedb) => I_Model.is_error feedb) pbl of
   18.87          SOME (_, _, _, fd, itm_) =>
   18.88            ("dummy", (Pos.Pbl, P_Model.mk_delete (ThyC.get_theory ctxt
   18.89              (if dI = ThyC.id_empty then dI' else dI)) fd itm_))
   18.90        | NONE => 
   18.91 +(*OLD* )
   18.92          (case item_to_add (ThyC.get_theory ctxt
   18.93              (if dI = ThyC.id_empty then dI' else dI)) oris pbt pbl of
   18.94 +( *---*)
   18.95 +        (case item_to_add ctxt oris (I_Model.OLD_to_TEST pbl) of
   18.96 +(*NEW*)
   18.97             SOME (fd, ct') => ("dummy", (Pos.Pbl, P_Model.mk_additem fd ct'))
   18.98           | NONE => (*pbl-items complete*)        
   18.99             if not preok then ("dummy", (Pos.Pbl, Tactic.Refine_Problem pI'))
  18.100 @@ -107,11 +160,15 @@
  18.101             else if pI = Problem.id_empty then ("dummy", (Pos.Pbl, Tactic.Specify_Problem pI'))
  18.102             else if mI = MethodC.id_empty then ("dummy", (Pos.Pbl, Tactic.Specify_Method mI'))
  18.103             else
  18.104 -            case find_first (I_Model.is_error o #5) met of
  18.105 +            case find_first (fn (_, _, _, _, feedb) => I_Model.is_error feedb) (I_Model.TEST_to_OLD met) of
  18.106                SOME (_, _, _, fd, itm_) =>
  18.107                   ("dummy", (Pos.Met, P_Model.mk_delete (ThyC.get_theory ctxt dI) fd itm_))
  18.108              | NONE => 
  18.109 +(*OLD* )
  18.110                (case item_to_add (ThyC.get_theory ctxt dI) oris mpc met of
  18.111 +( *---*)
  18.112 +              (case item_to_add ctxt oris met of
  18.113 +(*NEW*)
  18.114      	          SOME (fd, ct') =>
  18.115                     ("dummy", (Pos.Met, P_Model.mk_additem fd ct')) (*30.8.01: where_?!?*)
  18.116      		      | NONE => ("dummy", (Pos.Met, Tactic.Apply_Method mI))))
  18.117 @@ -123,15 +180,19 @@
  18.118      val {model = mpc, where_rls, where_, ...} = MethodC.from_store ctxt cmI;
  18.119      val (preok, _) = Pre_Conds.check ctxt where_rls where_ (mpc, I_Model.OLD_to_TEST met);
  18.120    in
  18.121 -    (case find_first (I_Model.is_error o #5) met of
  18.122 +    (case find_first (fn (_, _, _, _, feedb) => I_Model.is_error feedb) met of
  18.123        SOME (_,_,_, fd, itm_) =>
  18.124          ("dummy", (Pos.Met, P_Model.mk_delete (ThyC.get_theory ctxt
  18.125              (if dI = ThyC.id_empty then dI' else dI)) fd itm_))
  18.126      | NONE => 
  18.127 +(*OLD* )
  18.128        case item_to_add (ThyC.get_theory ctxt 
  18.129 -          (if dI = ThyC.id_empty then dI' else dI)) oris mpc met of
  18.130 +          (if dI = ThyC.id_empty then dI' else dI)) oris mpc (met) of
  18.131 +( *---*)
  18.132 +      case item_to_add ctxt oris (I_Model.OLD_to_TEST met) of
  18.133 +(*NEW*)
  18.134          SOME (fd, ct') =>
  18.135 -          ("dummy", (Pos.Met, P_Model.mk_additem fd ct')) (*->->*)
  18.136 +          ("dummy", (Pos.Met, P_Model.mk_additem fd ct'))
  18.137        | NONE => 
  18.138          (if dI = ThyC.id_empty then ("dummy", (Pos.Met, Tactic.Specify_Theory dI'))
  18.139           else if pI = Problem.id_empty then ("dummy", (Pos.Met, Tactic.Specify_Problem pI'))
  18.140 @@ -156,7 +217,7 @@
  18.141            ["no_met"] => ("ok", (Pos.Pbl, Tactic.Refine_Tacitly pI'))
  18.142          | _ => ("ok", (Pos.Pbl, Tactic.Model_Problem))
  18.143        else if p_ = Pos.Pbl then
  18.144 -        for_problem ctxt oris (o_refs, refs) (pbl, met)
  18.145 +        for_problem ctxt oris (o_refs, refs) (pbl, I_Model.OLD_to_TEST met)
  18.146        else
  18.147          for_method ctxt oris (o_refs, refs) (pbl, met)
  18.148      end
    19.1 --- a/test/Tools/isac/Interpret/li-tool.sml	Sun Oct 29 07:14:14 2023 +0100
    19.2 +++ b/test/Tools/isac/Interpret/li-tool.sml	Thu Nov 16 08:15:46 2023 +0100
    19.3 @@ -279,15 +279,10 @@
    19.4  (*[], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "Traegerlaenge L" = nxt
    19.5  (*[], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "Streckenlast q_0" = nxt
    19.6  (*[], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Find "Biegelinie y" = nxt
    19.7 -(*/---broken elementwise input to lists---\* )
    19.8 -(*[], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p c pt; (*\<rightarrow>Add_Relation "Randbedingungen [y 0 = 0]", ERROR MISSING step: M_b 0 = 0*)
    19.9 -                                        (*isa* ) val Add_Relation "Randbedingungen [y 0 = 0, y L = 0, M_b 0 = 0, M_b L = 0]" = nxt
   19.10 -                                        ( *isa2*) val Add_Relation "Randbedingungen [y 0 = 0]" = nxt
   19.11 -(*[], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p c pt; (*\<rightarrow>Add_Relation "Randbedingungen [y L = 0, M_b 0 = 0, M_b L = 0]"*)
   19.12 -                                        (*isa*) val Specify_Theory "Biegelinie" = nxt
   19.13 -                                        (*isa2* ) val Add_Relation "Randbedingungen [y L = 0, M_b 0 = 0, M_b L = 0]" = nxt( **)
   19.14 -( *\---broken elementwise input to lists---/*)
   19.15 -(*[], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Relation "Randbedingungen [y 0 = 0, y L = 0, M_b 0 = 0, M_b L = 0]" = nxt
   19.16 +(*[], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Relation "Randbedingungen [y 0 = 0]" = nxt
   19.17 +(*[], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Relation "Randbedingungen [y 0 = 0, y L = 0]" = nxt
   19.18 +(*[], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Relation "Randbedingungen [y 0 = 0, y L = 0, M_b 0 = 0]" = nxt
   19.19 +(*[], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Relation "Randbedingungen [y L = 0, y 0 = 0, M_b 0 = 0, M_b L = 0]" = nxt
   19.20  (*[], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Specify_Theory "Biegelinie" = nxt
   19.21  (*[], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Specify_Problem ["Biegelinien"] = nxt
   19.22  (*[], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Specify_Method ["IntegrierenUndKonstanteBestimmen2"] = nxt
   19.23 @@ -295,16 +290,10 @@
   19.24  (*[], Met*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "AbleitungBiegelinie y'" = nxt
   19.25  (*[], Met*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "Biegemoment M_b" = nxt
   19.26  (*[], Met*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "Querkraft Q" = nxt
   19.27 -
   19.28 -(*/---with M_Model.match_itms_oris broken elementwise input to lists---\*)
   19.29 -(*NEW match_itms_oris*)
   19.30  (*[], Met*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "GleichungsVariablen [c]" = nxt
   19.31 -(*NEW*)(*[], Met*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "GleichungsVariablen [c_2, c_3, c_4]" = nxt
   19.32 -(*NEW*)(*[], Met*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Apply_Method ["IntegrierenUndKonstanteBestimmen2"] = nxt
   19.33 -(*\---with M_Model.match_itms_oris broken elementwise input to lists---/*)
   19.34 -
   19.35 -(*--------------------- @ {context}----------------------------------------------
   19.36 -(*[], Met*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "GleichungsVariablen [c, c_2, c_3, c_4]" = nxt
   19.37 +(*[], Met*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "GleichungsVariablen [c, c_2]" = nxt
   19.38 +(*[], Met*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "GleichungsVariablen [c, c_2, c_3]" = nxt
   19.39 +(*[], Met*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "GleichungsVariablen [c_2, c, c_3, c_4]" = nxt
   19.40  
   19.41  (*[], Met*)val return_me_Add_Given_GleichungsVariablen
   19.42                                  = me nxt p c pt; (*val Apply_Method ["IntegrierenUndKonstanteBestimmen2"] = nxt*)
   19.43 @@ -348,17 +337,8 @@
   19.44        val (_, itms) = I_Model.s_make_complete ctxt oris
   19.45          (I_Model.OLD_to_TEST probl, I_Model.OLD_to_TEST itms) (pI', mI)
   19.46  ;
   19.47 -(*+*)if (itms |> I_Model.to_string_TEST @{context}) = "[\n" ^
   19.48 -  "(1, [1], true ,#Given, (Cor_TEST Traegerlaenge L , pen2str, Position.T)), \n" ^
   19.49 -  "(2, [1], true ,#Given, (Cor_TEST Streckenlast q_0 , pen2str, Position.T)), \n" ^
   19.50 -  "(4, [1], true ,#Relate, (Cor_TEST Randbedingungen [y 0 = 0, y L = 0, M_b 0 = 0, M_b L = 0] , pen2str, Position.T)), \n" ^
   19.51 -  "(5, [1], true ,#Given, (Cor_TEST FunktionsVariable x , pen2str, Position.T)), \n" ^
   19.52 -  "(6, [1], true ,#Given, (Cor_TEST AbleitungBiegelinie y' , pen2str, Position.T)), \n" ^
   19.53 -  "(7, [1], true ,#Given, (Cor_TEST Biegemoment M_b , pen2str, Position.T)), \n" ^
   19.54 -  "(8, [1], true ,#Given, (Cor_TEST Querkraft Q , pen2str, Position.T)), \n" ^
   19.55 -  "(9, [1], true ,#Given, (Cor_TEST GleichungsVariablen [c, c_2, c_3, c_4] , pen2str, Position.T)), \n" ^
   19.56 -  "(3, [1], true ,#Find, (Cor_TEST Biegelinie y , pen2str, Position.T))]"
   19.57 -(*+*)then () else error "init_pstate: initial i_model changed";
   19.58 +(*+*)val "[\n(1, [1], true ,#Given, (Cor_TEST Traegerlaenge L , pen2str, Position.T)), \n(2, [1], true ,#Given, (Cor_TEST Streckenlast q_0 , pen2str, Position.T)), \n(4, [1], true ,#Relate, (Cor_TEST Randbedingungen [M_b 0 = 0, y 0 = 0, y L = 0, M_b L = 0] , pen2str, Position.T)), \n(5, [1], true ,#Given, (Cor_TEST FunktionsVariable x , pen2str, Position.T)), \n(6, [1], true ,#Given, (Cor_TEST AbleitungBiegelinie y' , pen2str, Position.T)), \n(7, [1], true ,#Given, (Cor_TEST Biegemoment M_b , pen2str, Position.T)), \n(8, [1], true ,#Given, (Cor_TEST Querkraft Q , pen2str, Position.T)), \n(9, [1], true ,#Given, (Cor_TEST GleichungsVariablen [c_3, c, c_2, c_4] , pen2str, Position.T)), \n(3, [1], true ,#Find, (Cor_TEST Biegelinie y , pen2str, Position.T))]"
   19.59 + = itms |> I_Model.to_string_TEST @{context};
   19.60  
   19.61      (*case*)
   19.62      LItool.init_pstate ctxt itms mI (*of*);
   19.63 @@ -380,27 +360,8 @@
   19.64      val subst_eval_list = make_envs_preconds equal_givens
   19.65      val (env_subst, env_eval) = split_list subst_eval_list
   19.66  ;
   19.67 -(*+*)if (equal_descr_pairs |> descr_pairs_to_string @{context}) = "[" ^
   19.68 -(*defined: in program+model--vvvv--,----------------------------------------- in problem ---vvv*)
   19.69 -  "((#Given, (Traegerlaenge, l_l)), (1, [1], true ,#Given, " ^
   19.70 -    "(Cor_TEST Traegerlaenge L , pen2str, Position.T))), " ^
   19.71 -  "((#Given, (Streckenlast, q_q)), (2, [1], true ,#Given, " ^
   19.72 -    "(Cor_TEST Streckenlast q_0 , pen2str, Position.T))), " ^
   19.73 -  "((#Given, (Randbedingungen, r_b)), (4, [1], true ,#Relate, " ^
   19.74 -    "(Cor_TEST Randbedingungen [y 0 = 0, y L = 0, M_b 0 = 0, M_b L = 0] , pen2str, Position.T))), " ^
   19.75 -  "((#Given, (FunktionsVariable, fun_var)), (5, [1], true ,#Given, " ^
   19.76 -    "(Cor_TEST FunktionsVariable x , pen2str, Position.T))), " ^
   19.77 -  "((#Given, (AbleitungBiegelinie, id_der)), (6, [1], true ,#Given, " ^
   19.78 -    "(Cor_TEST AbleitungBiegelinie y' , pen2str, Position.T))), " ^
   19.79 -  "((#Given, (Biegemoment, id_momentum)), (7, [1], true ,#Given, " ^
   19.80 -    "(Cor_TEST Biegemoment M_b , pen2str, Position.T))), " ^
   19.81 -  "((#Given, (Querkraft, id_lat_force)), (8, [1], true ,#Given, " ^
   19.82 -    "(Cor_TEST Querkraft Q , pen2str, Position.T))), " ^
   19.83 -  "((#Given, (GleichungsVariablen, vs)), (9, [1], true ,#Given, " ^
   19.84 -    "(Cor_TEST GleichungsVariablen [c, c_2, c_3, c_4] , pen2str, Position.T))), " ^
   19.85 -  "((#Find, (Biegelinie, b_b)), (3, [1], true ,#Find, (" ^
   19.86 -    "Cor_TEST Biegelinie y , pen2str, Position.T)))]"
   19.87 -then () else error "of_max_variant: equal_descr_pairs CHANGED";
   19.88 +(*+*)val "[((#Given, (Traegerlaenge, l_l)), (1, [1], true ,#Given, (Cor_TEST Traegerlaenge L , pen2str, Position.T))), ((#Given, (Streckenlast, q_q)), (2, [1], true ,#Given, (Cor_TEST Streckenlast q_0 , pen2str, Position.T))), ((#Given, (Randbedingungen, r_b)), (4, [1], true ,#Relate, (Cor_TEST Randbedingungen [M_b 0 = 0, y 0 = 0, y L = 0, M_b L = 0] , pen2str, Position.T))), ((#Given, (FunktionsVariable, fun_var)), (5, [1], true ,#Given, (Cor_TEST FunktionsVariable x , pen2str, Position.T))), ((#Given, (AbleitungBiegelinie, id_der)), (6, [1], true ,#Given, (Cor_TEST AbleitungBiegelinie y' , pen2str, Position.T))), ((#Given, (Biegemoment, id_momentum)), (7, [1], true ,#Given, (Cor_TEST Biegemoment M_b , pen2str, Position.T))), ((#Given, (Querkraft, id_lat_force)), (8, [1], true ,#Given, (Cor_TEST Querkraft Q , pen2str, Position.T))), ((#Given, (GleichungsVariablen, vs)), (9, [1], true ,#Given, (Cor_TEST GleichungsVariablen [c_3, c, c_2, c_4] , pen2str, Position.T))), ((#Find, (Biegelinie, b_b)), (3, [1], true ,#Find, (Cor_TEST Biegelinie y , pen2str, Position.T)))]"
   19.89 + = equal_descr_pairs |> descr_pairs_to_string @{context}
   19.90  
   19.91      val return_make_env_model = make_env_model equal_descr_pairs;
   19.92  (*////---------------- step into make_env_model --------------------------------------------\\*)
   19.93 @@ -413,13 +374,13 @@
   19.94  
   19.95  (*+*)val "[x]" = ts |> UnparseC.terms @{context}
   19.96  ;
   19.97 -  (*if*) Model_Pattern.is_list_descr descr (*else*);
   19.98 +  (*if*) Pre_Conds.is_list_descr descr (*else*);
   19.99  val return_handle_lists_step = [(id, Library.the_single ts)]
  19.100  
  19.101  (*+*)val "[\"\n(fun_var, x)\"]" = return_handle_lists_step |> Subst.to_string @{context}
  19.102  (*\\\\---------------- step into make_env_model --------------------------------------------//*)
  19.103      val env_model = return_make_env_model
  19.104 -(*+*)val "[\"\n(l_l, L)\", \"\n(q_q, q_0)\", \"\n(r_b, [y 0 = 0, y L = 0, M_b 0 = 0, M_b L = 0])\", \"\n(fun_var, x)\", \"\n(id_der, y')\", \"\n(id_momentum, M_b)\", \"\n(id_lat_force, Q)\", \"\n(vs, [c, c_2, c_3, c_4])\", \"\n(b_b, y)\"]"
  19.105 +(*+*)val "[\"\n(l_l, L)\", \"\n(q_q, q_0)\", \"\n(r_b, [M_b 0 = 0, y 0 = 0, y L = 0, M_b L = 0])\", \"\n(fun_var, x)\", \"\n(id_der, y')\", \"\n(id_momentum, M_b)\", \"\n(id_lat_force, Q)\", \"\n(vs, [c_3, c, c_2, c_4])\", \"\n(b_b, y)\"]"
  19.106   = env_model |> Subst.to_string @{context}
  19.107  
  19.108  (*|||----------------- contine of_max_variant ------------------------------------------------*)
  19.109 @@ -427,17 +388,15 @@
  19.110      val subst_eval_list = make_envs_preconds equal_givens
  19.111      val (env_subst, env_eval) = split_list subst_eval_list
  19.112  
  19.113 -(*bieg*)val "[\"\n(l_l, L)\", \"\n(q_q, q_0)\", \"\n(r_b, [y 0 = 0, y L = 0, M_b 0 = 0, M_b L = 0])\", \"\n(fun_var, x)\", \"\n(id_der, y')\", \"\n(id_momentum, M_b)\", \"\n(id_lat_force, Q)\", \"\n(vs, [c, c_2, c_3, c_4])\", \"\n(b_b, y)\"]"
  19.114 +(*bieg*)val "[\"\n(l_l, L)\", \"\n(q_q, q_0)\", \"\n(r_b, [M_b 0 = 0, y 0 = 0, y L = 0, M_b L = 0])\", \"\n(fun_var, x)\", \"\n(id_der, y')\", \"\n(id_momentum, M_b)\", \"\n(id_lat_force, Q)\", \"\n(vs, [c_3, c, c_2, c_4])\", \"\n(b_b, y)\"]"
  19.115   = env_model |> Subst.to_string @{context}
  19.116  (*bieg*)val "[]" = env_subst |> Subst.to_string @{context}
  19.117  ;
  19.118  (*\\\----------------- step into of_max_variant --------------------------------------------//*)
  19.119 -    val (env_model, (env_subst, env_eval)) = return_make_environments
  19.120  
  19.121  (*||------------------ contine init_pstate ---------------------------------------------------*)
  19.122      val actuals = map snd env_model
  19.123 -(*+*) val "[L, q_0, [y 0 = 0, y L = 0, M_b 0 = 0, M_b L = 0], x, y', M_b, Q, [c, c_2, c_3, c_4], y]"
  19.124 -(*-----------------///--------------------------------------------------------------------------^^*)
  19.125 +(*+*) val "[L, q_0, [M_b 0 = 0, y 0 = 0, y L = 0, M_b L = 0], x, y', M_b, Q, [c_3, c, c_2, c_4], y]"
  19.126   = actuals |> UnparseC.terms @{context}
  19.127  
  19.128      val formals = Program.formal_args prog
  19.129 @@ -462,5 +421,3 @@
  19.130  (* final test ... ----------------------------------------------------------------------------*)
  19.131  (*+*)val ([], Met) = p
  19.132  (*+*)val Apply_Method ["IntegrierenUndKonstanteBestimmen2"] = nxt
  19.133 - --------------------- @ {context}----------------------------------------------*)
  19.134 -
    20.1 --- a/test/Tools/isac/Knowledge/algein.sml	Sun Oct 29 07:14:14 2023 +0100
    20.2 +++ b/test/Tools/isac/Knowledge/algein.sml	Thu Nov 16 08:15:46 2023 +0100
    20.3 @@ -1,6 +1,7 @@
    20.4 -(* tests on AlgEin, Algebra Einf"uhrung, , Unterrichtsversuch IMST-Projekt
    20.5 -   author: Walther Neuper 2007
    20.6 -   (c) due to copyright terms
    20.7 +(* Title: "Knowledge/algein.sml"
    20.8 +   Author: Walther Neuper 2007
    20.9 +
   20.10 +Note: Unterrichtsversuch IMST-Projekt, Algebra Einf"uhrung
   20.11  *)
   20.12  
   20.13  "-----------------------------------------------------------------";
   20.14 @@ -46,35 +47,29 @@
   20.15  val (p,_,f,nxt,_,pt) = Test_Code.init_calc @{context} [(fmz, (dI',pI',mI'))]; val Model_Probelm = nxt
   20.16  val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "KantenLaenge (k = 10)" = nxt
   20.17  val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "Querschnitt (q = 1)" = nxt
   20.18 -(*/---broken elementwise input to lists---\* )
   20.19  val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "KantenUnten [b1 = k - 2 * q]" = nxt
   20.20 -val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "KantenUnten [b2 = k - 2 * q, b3 = k - 2 * q, b4 = k - 2 * q]" = nxt
   20.21 -( *\---broken elementwise input to lists---/*)
   20.22 -val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "KantenUnten [b1 = k - 2 * q, b2 = k - 2 * q, b3 = k - 2 * q, b4 = k - 2 * q]" = nxt
   20.23 -
   20.24 -(*/---broken elementwise input to lists---\* )
   20.25 +val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "KantenUnten [b1 = k - 2 * q, b2 = k - 2 * q]" = nxt
   20.26 +val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "KantenUnten [b1 = k - 2 * q, b2 = k - 2 * q, b3 = k - 2 * q]" = nxt
   20.27 +val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "KantenUnten [b2 = k - 2 * q, b1 = k - 2 * q, b3 = k - 2 * q, b4 = k - 2 * q]" = nxt
   20.28  val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "KantenSenkrecht [v1 = k]" = nxt
   20.29 -val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "KantenSenkrecht [v2 = k, v3 = k, v4 = k]" = nxt
   20.30 -( *\---broken elementwise input to lists---/*)
   20.31 -val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "KantenSenkrecht [v1 = k, v2 = k, v3 = k, v4 = k]" = nxt
   20.32 -
   20.33 -(*/---broken elementwise input to lists---\* )
   20.34 +val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "KantenSenkrecht [v1 = k, v2 = k]" = nxt
   20.35 +val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "KantenSenkrecht [v1 = k, v2 = k, v3 = k]" = nxt
   20.36 +val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "KantenSenkrecht [v2 = k, v1 = k, v3 = k, v4 = k]" = nxt
   20.37  val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "KantenOben [t1 = k - 2 * q]" = nxt
   20.38 -val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "KantenOben [t2 = k - 2 * q, t3 = k - 2 * q, t4 = k - 2 * q]" = nxt
   20.39 -( *\---broken elementwise input to lists---/*)
   20.40 -val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "KantenOben [t1 = k - 2 * q, t2 = k - 2 * q, t3 = k - 2 * q, t4 = k - 2 * q]" = nxt
   20.41 -
   20.42 +val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "KantenOben [t1 = k - 2 * q, t2 = k - 2 * q]" = nxt
   20.43 +val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "KantenOben [t1 = k - 2 * q, t2 = k - 2 * q, t3 = k - 2 * q]" = nxt
   20.44 +val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "KantenOben [t2 = k - 2 * q, t1 = k - 2 * q, t3 = k - 2 * q, t4 = k - 2 * q]" = nxt
   20.45  val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Find "GesamtLaenge L" = nxt
   20.46  val (p,_,f,nxt,_,pt) = me nxt p c pt; val Specify_Theory "Isac_Knowledge" = nxt
   20.47  val (p,_,f,nxt,_,pt) = me nxt p c pt; val Specify_Problem ["numerischSymbolische", "Berechnung"] = nxt
   20.48  val (p,_,f,nxt,_,pt) = me nxt p c pt; val Specify_Method ["Berechnung", "erstNumerisch"] = nxt
   20.49  val (p,_,f,nxt,_,pt) = me nxt p c pt; val Apply_Method ["Berechnung", "erstNumerisch"] = nxt
   20.50 -val (p,_,f,nxt,_,pt) = me nxt p c pt; val Substitute ["oben = t1 + t2 + t3 + t4"] = nxt;
   20.51 +val (p,_,f,nxt,_,pt) = me nxt p c pt; val Substitute ["oben = t3 + t1 + t2 + t4"] = nxt;
   20.52  f2str f;
   20.53 -val (p,_,f,nxt,_,pt) = me nxt p c pt; val Substitute ["t1 = k - 2 * q", "t2 = k - 2 * q", "t3 = k - 2 * q", "t4 = k - 2 * q"] = nxt
   20.54 +val (p,_,f,nxt,_,pt) = me nxt p c pt; val Substitute ["t3 = k - 2 * q", "t1 = k - 2 * q", "t2 = k - 2 * q", "t4 = k - 2 * q"] = nxt
   20.55  val (p,_,f,nxt,_,pt) = me nxt p c pt; val Substitute ["k = 10", "q = 1"] = nxt
   20.56  val (p,_,f,nxt,_,pt) = me nxt p c pt; val Rewrite_Set "norm_Poly" = nxt
   20.57 -val (p,_,f,nxt,_,pt) = me nxt p c pt; val Substitute ["senkrecht = v1 + v2 + v3 + v4"] = nxt;
   20.58 +val (p,_,f,nxt,_,pt) = me nxt p c pt; val Substitute ["senkrecht = v3 + v1 + v2 + v4"] = nxt;
   20.59  if f2str f = "L = 32 + senkrecht + unten" then ()
   20.60  else error "algein.sml diff.behav. in erstNumerisch 1";
   20.61  val (p,_,f,nxt,_,pt) = me nxt p c pt;val(p,_,f,nxt,_,pt)=me nxt p c pt;f2str f;
    21.1 --- a/test/Tools/isac/Knowledge/biegelinie-2.sml	Sun Oct 29 07:14:14 2023 +0100
    21.2 +++ b/test/Tools/isac/Knowledge/biegelinie-2.sml	Thu Nov 16 08:15:46 2023 +0100
    21.3 @@ -67,12 +67,10 @@
    21.4  val (p,_,f,nxt,_,pt) = Test_Code.init_calc @{context} [(fmz, (dI',pI',mI'))]; val Model_Problem = nxt
    21.5  val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "Streckenlast q_0" = nxt
    21.6  val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "FunktionsVariable x" = nxt
    21.7 -
    21.8 -val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Find "Funktionen\n [Q x = c + - 1 * q_0 * x, M_b x = c_2 + c * x + - 1 * q_0 / 2 * x \<up> 2,\n  y' x =\n  c_3 +\n  1 / (- 1 * EI) *\n  (c_2 * x + c / 2 * x \<up> 2 + - 1 * q_0 / 6 * x \<up> 3),\n  y x =\n  c_4 + c_3 * x +\n  1 / (- 1 * EI) *\n  (c_2 / 2 * x \<up> 2 + c / 6 * x \<up> 3 + - 1 * q_0 / 24 * x \<up> 4)]" = nxt
    21.9 -(*/---broken elementwise input to lists---\* )
   21.10  val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Find "Funktionen [Q x = c + - 1 * q_0 * x]" = nxt
   21.11 -val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Find "Funktionen\n [M_b x = c_2 + c * x + - 1 * q_0 / 2 * x \<up> 2,\n  y' x =\n  c_3 +\n  1 / (- 1 * EI) *\n  (c_2 * x + c / 2 * x \<up> 2 + - 1 * q_0 / 6 * x \<up> 3),\n  y x =\n  c_4 + c_3 * x +\n  1 / (- 1 * EI) *\n  (c_2 / 2 * x \<up> 2 + c / 6 * x \<up> 3 + - 1 * q_0 / 24 * x \<up> 4)]" = nxt
   21.12 -( *\---broken elementwise input to lists---/*)
   21.13 +val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Find "Funktionen [Q x = c + - 1 * q_0 * x, M_b x = c_2 + c * x + - 1 * q_0 / 2 * x \<up> 2]" = nxt
   21.14 +val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Find "Funktionen [Q x = c + - 1 * q_0 * x, M_b x = c_2 + c * x + - 1 * q_0 / 2 * x \<up> 2, y' x =\nc_3 +\n1 / (- 1 * EI) * (c_2 * x + c / 2 * x \<up> 2 + - 1 * q_0 / 6 * x \<up> 3)]" = nxt
   21.15 +val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Find "Funktionen [M_b x = c_2 + c * x + - 1 * q_0 / 2 * x \<up> 2, Q x = c + - 1 * q_0 * x, y' x =\nc_3 +\n1 / (- 1 * EI) * (c_2 * x + c / 2 * x \<up> 2 + - 1 * q_0 / 6 * x \<up> 3), y x =\nc_4 + c_3 * x +\n1 / (- 1 * EI) *\n(c_2 / 2 * x \<up> 2 + c / 6 * x \<up> 3 + - 1 * q_0 / 24 * x \<up> 4)]" = nxt
   21.16  val (p,_,f,nxt,_,pt) = me nxt p c pt; val Specify_Theory "Biegelinie" = nxt
   21.17  val (p,_,f,nxt,_,pt) = me nxt p c pt; val Specify_Problem ["vonBelastungZu", "Biegelinien"] = nxt
   21.18  val (p,_,f,nxt,_,pt) = me nxt p c pt; val Specify_Method ["Biegelinien", "ausBelastung"] = nxt
    22.1 --- a/test/Tools/isac/MathEngine/step.sml	Sun Oct 29 07:14:14 2023 +0100
    22.2 +++ b/test/Tools/isac/MathEngine/step.sml	Thu Nov 16 08:15:46 2023 +0100
    22.3 @@ -1,6 +1,5 @@
    22.4  (* Title:  "MathEngine/step.sml"
    22.5     Author: Walther Neuper
    22.6 -   (c) due to copyright terms
    22.7  *)
    22.8  
    22.9  "-----------------------------------------------------------------------------------------------";
   22.10 @@ -292,21 +291,12 @@
   22.11    = Step.specify_do_next ptp;
   22.12  val ("ok", ([(Add_Find "maximum A", _, _)], _, ptp))
   22.13    = Step.specify_do_next ptp;
   22.14 -(*/---broken elementwise input to lists---\* )
   22.15  val ("ok", ([(Add_Find "valuesFor [a]", _, _)], _, ptp))
   22.16    = Step.specify_do_next ptp;
   22.17 -val ("ok", ([(Add_Find "valuesFor [b]", _, _)], _, ptp))
   22.18 -  = Step.specify_do_next ptp;
   22.19 -( *\---broken elementwise input to lists---/*)
   22.20  val ("ok", ([(Add_Find "valuesFor [a, b]", _, _)], _, ptp))
   22.21    = Step.specify_do_next ptp;
   22.22 -
   22.23 -(*/---broken elementwise input to lists---\* )
   22.24  val ("ok", ([(Add_Relation "relations [A = a * b]", _, _)], _, ptp))
   22.25    = Step.specify_do_next ptp;
   22.26 -val ("ok", ([(Add_Relation "relations [(a / 2) \<up> 2 + (b / 2) \<up> 2 = r \<up> 2]", _, _)], _, ptp))
   22.27 -  = Step.specify_do_next ptp;
   22.28 -( *\---broken elementwise input to lists---/*)
   22.29  val ("ok", ([(Add_Relation "relations [A = a * b, (a / 2) \<up> 2 + (b / 2) \<up> 2 = r \<up> 2]", _, _)], _, ptp))
   22.30    = Step.specify_do_next ptp;
   22.31  
   22.32 @@ -329,16 +319,17 @@
   22.33    = Step.specify_do_next ptp;
   22.34  
   22.35  (*** stepwise Specification: MethodC model ================================================ ***)
   22.36 -val ("ok", ([(Add_Given "boundVariable b", _, _)], _, ptp))
   22.37 +val ("ok", ([(Add_Given "boundVariable a", _, _)], _, ptp))
   22.38    = Step.specify_do_next ptp;
   22.39 -val ("ok", ([(Add_Given "interval {x. 0 \<le> x \<and> x \<le> 2 * r}", _, _)], _, ptp))
   22.40 +Step.specify_do_next ptp;
   22.41 +val ("ok", ([(Add_Given "interval ({x. 0 \<le> x \<and> x \<le> 2 * r})", _, _)], _, ptp))
   22.42    = Step.specify_do_next ptp;
   22.43  val ("ok", ([(Add_Given "errorBound (eps = 0)", _, _)], _, ptp))
   22.44    = Step.specify_do_next ptp;
   22.45  
   22.46  val PblObj {meth, ...} = get_obj I (fst ptp) [];
   22.47  
   22.48 -(*+*)val "[\n(1 ,[1, 2, 3] ,true ,#Given ,Cor fixedValues [r = Arbfix] , pen2str), \n(2 ,[1, 2, 3] ,true ,#Find ,Cor maximum A , pen2str), \n(4 ,[1, 2] ,true ,#Relate ,Cor relations [A = a * b, (a / 2) \<up> 2 + (b / 2) \<up> 2 = r \<up> 2] , pen2str), \n(3 ,[1, 2, 3] ,true ,#Find ,Cor valuesFor [a, b] , pen2str), \n(7 ,[2] ,true ,#Given ,Cor boundVariable b , pen2str), \n(9 ,[1, 2] ,true ,#Given ,Cor interval {x. 0 \<le> x \<and> x \<le> 2 * r} , pen2str), \n(11 ,[1, 2, 3] ,true ,#Given ,Cor errorBound (eps = 0) , pen2str)]"
   22.49 +(*+*)val "[\n(1 ,[1, 2, 3] ,true ,#Given ,Cor fixedValues [r = Arbfix] , pen2str), \n(2 ,[1, 2, 3] ,true ,#Find ,Cor maximum A , pen2str), \n(4 ,[1, 2] ,true ,#Relate ,Cor relations [A = a * b, (a / 2) \<up> 2 + (b / 2) \<up> 2 = r \<up> 2] , pen2str), \n(3 ,[1, 2, 3] ,true ,#Find ,Cor valuesFor [a, b] , pen2str), \n(6 ,[1] ,true ,#Given ,Cor boundVariable a , pen2str), \n(9 ,[1, 2] ,true ,#Given ,Cor interval {x. 0 \<le> x \<and> x \<le> 2 * r} , pen2str), \n(11 ,[1, 2, 3] ,true ,#Given ,Cor errorBound (eps = 0) , pen2str)]"
   22.50   = meth |> I_Model.to_string @{context}
   22.51  
   22.52  (*** Specification of Problem and MethodC model is complete, Solution starts ============== ***)
    23.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    23.2 +++ b/test/Tools/isac/Minisubpbl/100a-init-rootpbl-Maximum.sml	Thu Nov 16 08:15:46 2023 +0100
    23.3 @@ -0,0 +1,445 @@
    23.4 +(* Title:  "Minisubpbl/100a-init-rootpbl-Maximum.sml"
    23.5 +   Author: Walther Neuper 1105
    23.6 +   (c) copyright due to lincense terms.
    23.7 +
    23.8 +COMPARE Specify/specify.sml --- specify-phase: low level functions ---
    23.9 +
   23.10 +ATTENTION: the file creates buffer overflow if copied in one piece !
   23.11 +
   23.12 +Note: This test --- steps into me --- more than once, to a somewhat extreme extent;
   23.13 +  in order not to get lost while working in Test_Some etc, 
   23.14 +  re-introduce  ML (*--- step into XXXXX ---*) and Co.
   23.15 +  and use Sidekick for orientation.
   23.16 +  Nesting is indicated by  /---   //--   ///-  at the left margin of the comments.
   23.17 +*)
   23.18 +(*/------- these overwrite definitions in section above ---\*)
   23.19 +open Ctree;
   23.20 +open Pos;
   23.21 +open TermC;
   23.22 +open Istate;
   23.23 +open Tactic;
   23.24 +open I_Model;
   23.25 +open P_Model
   23.26 +open Rewrite;
   23.27 +open Step;
   23.28 +open LItool;
   23.29 +open LI;
   23.30 +open Test_Code
   23.31 +open Specify
   23.32 +open ME_Misc
   23.33 +open Pre_Conds;
   23.34 +(*\------- these overwrite definitions in section above ---/*)
   23.35 +
   23.36 +val (_(*example text*),
   23.37 +  (model as ("Constants [r = (7::real)]" :: "Maximum A" :: "AdditionalValues [u, v]" :: 
   23.38 +     "Extremum (A = 2 * u * v - u \<up> 2)" :: 
   23.39 +     "SideConditions [((u::real) / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2]" :: 
   23.40 +     "SideConditions [((u::real) / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2]" :: 
   23.41 +     "SideConditions [(u::real) / 2 = r * sin \<alpha>, 2 / v = r * cos \<alpha>]" ::
   23.42 +(*---------------------------------------------,(v::real) / 2 = r * cos \<alpha>]" --- ERROR in example*)
   23.43 +     "FunctionVariable a" :: "FunctionVariable b" :: "FunctionVariable \<alpha>" :: 
   23.44 +     "Domain {0 <..< r}" :: "Domain {0 <..< r}" :: "Domain {0 <..< \<pi> / 2}" ::
   23.45 +     "ErrorBound (\<epsilon> = (0::real))" :: []), 
   23.46 +   refs as ("Diff_App", 
   23.47 +     ["univariate_calculus", "Optimisation"],
   23.48 +     ["Optimisation", "by_univariate_calculus"])))
   23.49 +  = Store.get (Know_Store.get_expls @{theory}) ["Diff_App-No.123a"] ["Diff_App-No.123a"];
   23.50 +
   23.51 +val c = [];
   23.52 +val return_init_calc = 
   23.53 + Test_Code.init_calc @{context} [(model, refs)]; (*val Model_Problem = nxt;*)
   23.54 +(*/------------------- step into init_calc -------------------------------------------------\\*)
   23.55 +"~~~~~ fun init_calc , args:"; val (ctxt, [(model, refs as (thy_id, _, _))]) =
   23.56 +  (@{context}, [(model, refs)]);
   23.57 +    val thy = thy_id |> ThyC.get_theory ctxt
   23.58 +    val ((pt, p), tacis) = Step_Specify.initialise' thy (model, refs)
   23.59 +	  val tac = case tacis of [] => Tactic.Empty_Tac | _ => (#1 o hd) tacis
   23.60 +	  val f = 
   23.61 +           TESTg_form ctxt (pt,p);
   23.62 +"~~~~~ fun TESTg_form , args:"; val (ctxt, ptp) = (ctxt, (pt,p));
   23.63 +    val (form, _, _) =
   23.64 +   ME_Misc.pt_extract ctxt ptp;
   23.65 +"~~~~~ fun pt_extract , args:"; val (ctxt, (pt, (p, p_ as Pbl(*Frm,Pbl*)))) = (ctxt, ptp);
   23.66 +        val ppobj = Ctree.get_obj I pt p
   23.67 +        val f = if Ctree.is_pblobj ppobj then pt_model ppobj p_ else Ctree.get_obj pt_form pt p;
   23.68 +
   23.69 +            (*if*) Ctree.is_pblobj ppobj (*then*);
   23.70 +           pt_model ppobj p_ ;
   23.71 +"~~~~~ fun pt_model , args:"; val ((Ctree.PblObj {probl, spec, origin = (_, spec', hdl), ctxt, ...}), Pbl_) =
   23.72 +  (ppobj, p_);
   23.73 +      val (_, pI, _) = Ctree.get_somespec' spec spec';
   23.74 +(*    val where_ = if pI = Problem.id_empty then []*)
   23.75 +               (*if*) pI = Problem.id_empty (*else*);
   23.76 +	          val {where_rls, where_, model, ...} = Problem.from_store ctxt pI
   23.77 +	          val (_, where_) = 
   23.78 + Pre_Conds.check ctxt where_rls where_
   23.79 +              (model, I_Model.OLD_to_TEST probl);
   23.80 +"~~~~~ fun check , args:"; val (ctxt, where_rls, pres, (model_patt, i_model)) =
   23.81 +  (ctxt, where_rls, where_, (model, I_Model.OLD_to_TEST probl));
   23.82 +      val (env_model, (env_subst, env_eval)) = 
   23.83 +           make_environments model_patt i_model;
   23.84 +"~~~~~ fun make_environments , args:"; val (_, []) = (model_patt, i_model);
   23.85 +(*\------------------- step into init_calc -------------------------------------------------//*)
   23.86 +val (p,_,f,nxt,_,pt) = return_init_calc;
   23.87 +
   23.88 +(*+*)val PblObj {ctxt, probl, ...} = get_obj I pt [];
   23.89 +(*+*)Proof_Context.theory_of ctxt (*= {Pure, .., Diff_App}*);
   23.90 +(*+*)val Free ("r", Type ("Real.real", [])) = Syntax.read_term ctxt "r"
   23.91 +(*+*)val [] = probl
   23.92 +
   23.93 +val return_me_Model_Problem = 
   23.94 +           me nxt p c pt; val Add_Given "Constants [r = 7]" = #4 return_me_Model_Problem;
   23.95 +(*/------------------- step into me_Model_Problem ------------------------------------------\\*)
   23.96 +"~~~~~ fun me , args:"; val (tac as Model_Problem, (p:Pos.pos'), (_:Test_Code.NEW), (pt:Ctree.ctree)) = (nxt, p, c, pt);
   23.97 +      val ctxt = Ctree.get_ctxt pt p
   23.98 +val return_by_tactic = case
   23.99 +      Step.by_tactic tac (pt,p) of
  23.100 +		    ("ok", (_, _, ptp)) => ptp;
  23.101 +
  23.102 +(*//------------------ step into by_tactic -------------------------------------------------\\*)
  23.103 +"~~~~~ fun by_tactic , args:"; val (tac, (ptp as (pt, p))) = (tac, (pt,p));
  23.104 +val Applicable.Yes tac' = (*case*)
  23.105 +      Step.check tac (pt, p) (*of*);
  23.106 +(*+*)val Model_Problem' _ = tac';
  23.107 +"~~~~~ fun check , args:"; val (tac, (ctree, pos)) = (tac, (pt, p));
  23.108 +  (*if*) Tactic.for_specify tac (*then*);
  23.109 +
  23.110 +Specify_Step.check tac (ctree, pos);
  23.111 +"~~~~~ fun check , args:"; val (Tactic.Model_Problem, (pt, pos as (p, _))) =
  23.112 +  (tac, (ctree, pos));
  23.113 +        val (o_model, pI', ctxt) = case Ctree.get_obj I pt p of
  23.114 +          Ctree.PblObj {origin = (o_model, (_, pI', _), _), ctxt, ...} => (o_model, pI', ctxt)
  23.115 +	      val {model = model_patt, ...} = Problem.from_store (Ctree.get_ctxt pt pos) pI'
  23.116 +	      val pbl = I_Model.init_TEST o_model model_patt;
  23.117 +
  23.118 +val return_check =
  23.119 +    Applicable.Yes (Tactic.Model_Problem' (pI', I_Model.TEST_to_OLD pbl, []));
  23.120 +(*\\------------------ step into by_tactic -------------------------------------------------//*)
  23.121 +val (pt, p) = return_by_tactic;
  23.122 +
  23.123 +val return_do_next = (*case*)
  23.124 +      Step.do_next p ((pt, Pos.e_pos'), []) (*of*);
  23.125 +(*//------------------ step into do_next ---------------------------------------------------\\*)
  23.126 +"~~~~~ fun do_next , args:"; val (((ip as (_,p_)):pos'), ((ptp as (pt,p), tacis):Calc.state_pre)) =
  23.127 +  (p, ((pt, e_pos'),[]));
  23.128 +    val pIopt = get_pblID (pt,ip);
  23.129 +    (*if*) ip = ([],Res); (* = false*)
  23.130 +      val _ = (*case*) tacis (*of*);
  23.131 +      val SOME _ = (*case*) pIopt (*of*);
  23.132 +
  23.133 +    val ("ok", ([(Add_Given "Constants [r = 7]", _, _)], [], _)) =
  23.134 +      Step.switch_specify_solve p_ (pt, ip);
  23.135 +"~~~~~ fun switch_specify_solve , args:"; val (state_pos, (pt, input_pos)) = (p_, (pt, ip));
  23.136 +      (*if*) Pos.on_specification ([], state_pos) (*then*);
  23.137 +
  23.138 +    val ("ok", ([(Add_Given "Constants [r = 7]", _, _)], [], _)) =
  23.139 +      Step.specify_do_next (pt, input_pos);
  23.140 +(*///----------------- step into specify_do_next -------------------------------------------\\*)
  23.141 +"~~~~~ fun specify_do_next , args:"; val (ptp as (pt, (p, p_))) = (pt, input_pos);
  23.142 +
  23.143 +(*  val (_, (p_', tac)) =*)
  23.144 +val return_find_next_step = (*keep for continuing specify_do_next*)
  23.145 +   Specify.find_next_step ptp;
  23.146 +(*////---------------- step into find_next_step --------------------------------------------\\*)
  23.147 +"~~~~~ fun find_next_step , args:"; val ((pt, pos as (_, p_))) = (ptp);
  23.148 +    val {meth = met, origin = origin as (oris, o_refs as (_, pI', mI'), _), probl = pbl,
  23.149 +      spec = refs, ...} = Calc.specify_data (pt, pos);
  23.150 +    val ctxt = Ctree.get_ctxt pt pos;
  23.151 +      (*if*) Ctree.just_created (pt, pos) andalso origin <> Ctree.e_origin (*else*);
  23.152 +        (*if*) p_ = Pos.Pbl (*then*);
  23.153 +
  23.154 +val return_for_problem as ("dummy", (Pbl, Add_Given "Constants [r = 7]")) =
  23.155 +   Specify.for_problem ctxt oris (o_refs, refs) (pbl, I_Model.OLD_to_TEST met);
  23.156 +(*/////--------------- step into for_problem -----------------------------------------------\\*)
  23.157 +"~~~~~ fun for_problem , args:"; val (ctxt, oris, ((dI', pI', mI'), (dI, pI, mI)), (pbl, met))
  23.158 +  = (ctxt, oris, (o_refs, refs), (pbl, met));
  23.159 +    val cdI = if dI = ThyC.id_empty then dI' else dI;
  23.160 +    val cpI = if pI = Problem.id_empty then pI' else pI;
  23.161 +    val cmI = if mI = MethodC.id_empty then mI' else mI;
  23.162 +    val {model = pbt, where_rls, where_, ...} = Problem.from_store ctxt cpI;
  23.163 +    val {model = mpc, ...} = MethodC.from_store ctxt cmI;
  23.164 +
  23.165 +    val return_check =
  23.166 + Pre_Conds.check ctxt where_rls where_ (pbt, I_Model.OLD_to_TEST pbl);
  23.167 +(*//////-------------- step into check -------------------------------------------------\\*)
  23.168 +"~~~~~ fun check , args:"; val (ctxt, where_rls, pres, (model_patt, i_model)) =
  23.169 +  (ctxt, where_rls, where_, (pbt, I_Model.OLD_to_TEST pbl));
  23.170 +      val return_make_environments =
  23.171 +           make_environments model_patt i_model;
  23.172 +(*///// //------------ step into of_max_variant --------------------------------------------\\*)
  23.173 +"~~~~~ fun of_max_variant , args:"; val (model_patt, i_model) =
  23.174 +  (model_patt, i_model);
  23.175 +
  23.176 +(*+*)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))]"
  23.177 + = i_model |> I_Model.to_string_TEST ctxt
  23.178 +    val all_variants =
  23.179 +        map (fn (_, variants, _, _, _) => variants) i_model
  23.180 +        |> flat
  23.181 +        |> distinct op =
  23.182 +    val variants_separated = map (filter_variants' i_model) all_variants
  23.183 +    val sums_corr = map (Model_Def.cnt_corrects) variants_separated
  23.184 +    val sum_variant_s = Model_Def.arrange_args sums_corr (1, all_variants)
  23.185 +(*+*)val [(0, 1), (0, 2), (0, 3)] = sum_variant_s
  23.186 +    val (_, max_variant) = hd (*..crude decision, up to improvement *)
  23.187 +      (sort (fn ((i, _), (j, _)) => int_ord (i, j)) sum_variant_s)
  23.188 +    val i_model_max =
  23.189 +      filter (fn (_, variants, _ , _ ,_) => member (op =) variants max_variant) i_model
  23.190 +    val equal_descr_pairs = map (get_equal_descr i_model) model_patt |> flat
  23.191 +(*for building make_env_s -------------------------------------------------------------------\*)
  23.192 +(*!!!*) val ("#Given", (descr, term), pos) =
  23.193 +  Model_Pattern.split_descriptor ctxt ("#Given", @{term "Constants [r = (7::real)]"}, Position.none)
  23.194 +(*!!!*) val patt = equal_descr_pairs |> hd |> #1
  23.195 +(*!!!*)val equal_descr_pairs =
  23.196 +  (patt,
  23.197 +  (1, [1, 2, 3], true, "#Given", (Cor_TEST ((descr, (*!*)TermC.isalist2list(*!*) term)), pos)))
  23.198 +  :: tl equal_descr_pairs
  23.199 +(*for building make_env_s -------------------------------------------------------------------/*)
  23.200 +
  23.201 +    val env_model = make_env_model equal_descr_pairs;
  23.202 +(*///// ///----------- step into make_env_model --------------------------------------------\\*)
  23.203 +"~~~~~ fun make_env_model , args:"; val (equal_descr_pairs) = (equal_descr_pairs);
  23.204 +
  23.205 +val xxx = (fn ((_, (_, id)), (_, _, _, _, (feedb, _)))
  23.206 +       => (mk_env_model id feedb));
  23.207 +val ((_, (_, id)), (_, _, _, _, (feedb, _))) = nth 4 equal_descr_pairs;
  23.208 +(*\\\\\ \\\----------- step into make_env_model --------------------------------------------//*)
  23.209 +(*||||| ||------------ contine of_max_variant ------------------------------------------------*)
  23.210 +
  23.211 +    val equal_givens = filter (fn ((m_field, _), _) => m_field = "#Given") equal_descr_pairs
  23.212 +    val subst_eval_list = make_envs_preconds equal_givens
  23.213 +val return_make_envs_preconds =
  23.214 +           make_envs_preconds equal_givens;
  23.215 +(*///// ///----------- step into make_envs_preconds ----------------------------------------\\*)
  23.216 +"~~~~~ fun make_envs_preconds , args:"; val (equal_givens) = (equal_givens);
  23.217 +val xxx = (fn ((_, (_, id)), (_, _, _, _, (feedb, _))) => discern_feedback id feedb)
  23.218 +;
  23.219 +xxx: (Model_Pattern.single * I_Model.single_TEST) -> ((term * term) * (term * term)) list;
  23.220 +val return_discern_feedback =
  23.221 +           discern_feedback id feedb;
  23.222 +(*nth 1 equal_descr_pairs* )
  23.223 +"~~~~~ fun discern_feedback , args:"; val (id, (Model_Def.Cor_TEST ((descr, ts), _))) = (id, feedb);
  23.224 +( *nth 2 equal_descr_pairs*)
  23.225 +"~~~~~ fun discern_feedback , args:"; val (id, (Model_Def.Inc_TEST ((descr, ts)))) = (id, feedb);
  23.226 +
  23.227 +(*nth 1 equal_descr_pairs* )
  23.228 +(*+*)val [((Const ("fixes", typ1), Free ("r", typ2)),
  23.229 +           (Free ("r", typ3), value))] = return_discern_feedback
  23.230 +(*+*)val true = typ1 = typ2
  23.231 +(*+*)val true = typ3 = HOLogic.realT
  23.232 +(*+*)val "7" = UnparseC.term ctxt value
  23.233 +( *nth 2 equal_descr_pairs*)
  23.234 +(*+*)val [] = return_discern_feedback
  23.235 +
  23.236 +val return_discern_typ =
  23.237 +           discern_typ id (descr, ts);
  23.238 +"~~~~~ fun discern_typ , args:"; val (id, (descr, ts)) = (id, (descr, ts));
  23.239 +(*nth 1 equal_descr_pairs* )
  23.240 +(*+*)val [((Const ("fixes", typ1), Free ("r", typ2)),
  23.241 +           (Free ("r", typ3), value))] = return_discern_typ
  23.242 +(*+*)val true = typ1 = typ2
  23.243 +(*+*)val true = typ3 = HOLogic.realT
  23.244 +(*+*)val "7" = UnparseC.term ctxt value
  23.245 +( *nth 2 equal_descr_pairs*)
  23.246 +(*+*)val [] = return_discern_typ;
  23.247 +(**)
  23.248 +           switch_type id ts;
  23.249 +"~~~~~ fun switch_type , args:"; val (Const (descr_string, _), ts) = (descr, ts);
  23.250 +
  23.251 +(*nth 1 equal_descr_pairs* )
  23.252 +val return_switch_type_TEST = Const (descr_string, ts |> hd |> TermC.lhs |> type_of)
  23.253 +
  23.254 +(*+*)val Const ("Input_Descript.Constants", typ) = return_switch_type_TEST
  23.255 +(*+*)val Type ("Real.real", []) = typ
  23.256 +( *nth 2 equal_descr_pairs*)
  23.257 +(*+*)val return_switch_type_TEST = descr
  23.258 +(**)
  23.259 +(*\\\\\ \\\----------- step into make_envs_preconds ----------------------------------------//*)
  23.260 +(*||||| ||------------ contine of_max_variant ------------------------------------------------*)
  23.261 +    val subst_eval_list = make_envs_preconds equal_givens
  23.262 +    val (env_subst, env_eval) = split_list subst_eval_list
  23.263 +val make_environments = (i_model_max, env_model, (env_subst, env_eval)); (*GOON*)
  23.264 +(*\\\\\ \\------------ step into of_max_variant --------------------------------------------//*)
  23.265 +      val (i_model_max, env_model, (env_subst, env_eval)) = make_environments
  23.266 +(*!!!/----- we had a helpful argument for constructing env_model and (env_subst, env_eval)---\*)
  23.267 +      val (i_max_variant, env_model, (env_subst, env_eval)) = (i_model_max, [], ([], []))
  23.268 +(*!!!\----- we had a helpful argument for constructing env_model and (env_subst, env_eval)---/*) 
  23.269 +(*||||| |------------- contine check -----------------------------------------------------*)
  23.270 +      val pres_subst = map (TermC.subst_atomic_all env_subst) pres;
  23.271 +      val pres_subst_other = map (TermC.subst_atomic_all env_model) (map #2 pres_subst);
  23.272 +      val full_subst = if env_eval = [] then pres_subst_other
  23.273 +        else map (TermC.subst_atomic_all env_eval) (map #2 pres_subst_other)
  23.274 +      val evals = map (eval ctxt where_rls) full_subst
  23.275 +val return_ = (i_model_max, env_subst, env_eval)
  23.276 +(*\\\\\ \------------- step into check -----------------------------------------------------//*)
  23.277 +val (preok, _) = return_check;
  23.278 +
  23.279 +(*|||||--------------- contine.. for_problem -------------------------------------------------*)
  23.280 +val false =
  23.281 +    (*if*) dI' = ThyC.id_empty andalso dI = ThyC.id_empty (*else*);
  23.282 +val false =
  23.283 +      (*if*) pI' = Problem.id_empty andalso pI = Problem.id_empty (*else*);
  23.284 +val NONE =
  23.285 +     (*case*) find_first (fn (_, _, _, _, feedb) => I_Model.is_error feedb) pbl (*of*);
  23.286 +
  23.287 +(** )val SOME (fd, ct') as ("#Given", "Constants [r = 7]") =( **)
  23.288 +(**)val return_item_to_add as SOME ("#Given", xxx) =(**) (*case*) 
  23.289 +   Specify.item_to_add ctxt oris (I_Model.OLD_to_TEST pbl) (*of*);
  23.290 +(*///// /------------- step into item_to_add -----------------------------------------------\\*)
  23.291 +(*==================== see test/../i_model.sml --- fun item_to_add ---========================*)
  23.292 +(*\\\\\ \------------- step into item_to_add -----------------------------------------------//*)
  23.293 +val SOME (fd, ct') = return_item_to_add
  23.294 +(*+*)val ("#Given", "Constants [r = 7]")  = (fd, ct') (*from NEW item_to_add*)
  23.295 +
  23.296 +(*|||||--------------- continue.. for_problem ------------------------------------------------*)
  23.297 +val return_for_problem_step as ("dummy", (Pbl, Add_Given "Constants [r = 7]"))
  23.298 +  = ("dummy", (Pos.Pbl, P_Model.mk_additem fd ct'))
  23.299 +(** )return_for_problem_step = return_for_problem( *..would require equality types*)
  23.300 +(*\\\\\--------------- step into for_problem -----------------------------------------------//*)
  23.301 +val return_find_next_step as ("dummy", (Pbl, Add_Given "Constants [r = 7]"))
  23.302 +  = return_for_problem
  23.303 +(*\\\\---------------- step into find_next_step --------------------------------------------//*)
  23.304 +(*|||----------------- continue.. specify_do_next --------------------------------------------*)
  23.305 +val (_, (p_', tac as Add_Given "Constants [r = 7]")) = return_find_next_step
  23.306 +
  23.307 +    val ist_ctxt =  Ctree.get_loc pt (p, p_)
  23.308 +(*+*)val Add_Given "Constants [r = 7]" = tac
  23.309 +val _ =
  23.310 +    (*case*) tac (*of*);
  23.311 +
  23.312 +val return_by_tactic_input as ("ok", ([(Add_Given "Constants [r = 7]", _, _)], [], _)) =
  23.313 +Step_Specify.by_tactic_input tac (pt, (p, p_'));
  23.314 +"~~~~~ fun by_tactic_input , args:"; val ((Tactic.Add_Given ct), ptp) =
  23.315 +  (tac, (pt, (p, p_')));
  23.316 +
  23.317 +   Specify.by_Add_ "#Given" ct ptp;
  23.318 +"~~~~~ fun by_Add_ , args:"; val (m_field, ct ,(pt, pos as (_, p_))) =
  23.319 +  ("#Given", ct, ptp);
  23.320 +    val (met, oris, (_, pI', mI'), pbl, (_, pI, mI), ctxt) = SpecificationC.get_data (pt, pos)
  23.321 +    val (i_model, m_patt) =
  23.322 +       if p_ = Pos.Met then
  23.323 +         (met,
  23.324 +           (if mI = MethodC.id_empty then mI' else mI) |> MethodC.from_store ctxt |> #model)
  23.325 +       else
  23.326 +         (pbl,
  23.327 +           (if pI = Problem.id_empty then pI' else pI) |> Problem.from_store ctxt |> #model);
  23.328 +
  23.329 +      (*case*)
  23.330 +   I_Model.check_single ctxt m_field oris i_model m_patt ct (*of*);
  23.331 +"~~~~~ fun check_single , args:"; val (ctxt, m_field, o_model, i_model, m_patt, (str(*, pos*))) =
  23.332 +  (ctxt, m_field, oris, i_model, m_patt, ct);
  23.333 +        val (t as (descriptor $ _)) = Syntax.read_term ctxt str
  23.334 +
  23.335 +(*+*)val "Constants [r = 7]" = UnparseC.term ctxt t;
  23.336 +
  23.337 +        val SOME m_field' =
  23.338 +          (*case*) Model_Pattern.get_field descriptor m_patt (*of*);
  23.339 +           (*if*) m_field <> m_field' (*else*);
  23.340 +
  23.341 +(*+*)val "#Given" = m_field; val "#Given" = m_field'
  23.342 +
  23.343 +val ("", ori', all) =
  23.344 +          (*case*) O_Model.contains ctxt m_field o_model t (*of*);
  23.345 +
  23.346 +(*+*)val (_, _, _, _, vals) = hd o_model;
  23.347 +(*+*)val "Constants [r = 7]" = UnparseC.term ctxt (@{term Constants} $ (hd vals));
  23.348 +(*+*)if "[\n(1, [\"1\", \"2\", \"3\"], #Given, Constants, [\"[r = 7]\"]), " ^ 
  23.349 +(*+*)    "\n(2, [\"1\", \"2\", \"3\"], #Find, Maximum, [\"A\"]), " ^ 
  23.350 +(*+*)    "\n(3, [\"1\", \"2\", \"3\"], #Find, AdditionalValues, [\"[u]\", \"[v]\"]), " ^ 
  23.351 +(*+*)    "\n(4, [\"1\", \"2\", \"3\"], #Relate, Extremum, [\"A = 2 * u * v - u \<up> 2\"]), " ^ 
  23.352 +(*+*)    "\n(5, [\"1\", \"2\"], #Relate, SideConditions, [\"[(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2]\"]), " ^ 
  23.353 +(*+*)    "\n(6, [\"3\"], #Relate, SideConditions, [\"[u / 2 = r * sin \<alpha>]\", \"[2 / v = r * cos \<alpha>]\"]), " ^ 
  23.354 +(*+*)    "\n(7, [\"1\"], #undef, FunctionVariable, [\"a\"]), " ^ 
  23.355 +(*+*)    "\n(8, [\"2\"], #undef, FunctionVariable, [\"b\"]), \n(9, [\"3\"], #undef, FunctionVariable, [\"\<alpha>\"]), " ^ 
  23.356 +(*+*)    "\n(10, [\"1\", \"2\"], #undef, Input_Descript.Domain, [\"{0<..<r}\"]), " ^ 
  23.357 +(*+*)    "\n(11, [\"3\"], #undef, Input_Descript.Domain, [\"{0<..<\<pi> / 2}\"]), " ^ 
  23.358 +(*+*)    "\n(12, [\"1\", \"2\", \"3\"], #undef, ErrorBound, [\"\<epsilon> = 0\"])]"
  23.359 +(*+*)= O_Model.to_string ctxt o_model then () else error "o_model CHANGED";
  23.360 +
  23.361 +  (*case*) is_notyet_input ctxt i_model all ori' m_patt (*of*);
  23.362 +"~~~~~ fun is_notyet_input , args:"; val (ctxt, itms, all, (i, v, f, d, ts), pbt) =
  23.363 +  (ctxt, i_model, all, ori', m_patt);
  23.364 +val SOME (_, (_, pid)) =
  23.365 +  (*case*) find_first (eq1 d) pbt (*of*);
  23.366 +(*local*)fun eq3 f d (_, _, _, f', itm_) = f = f' andalso d = (I_Model.descriptor itm_);(*local*)
  23.367 +val SOME (_, _, _, _, itm_) =
  23.368 +    (*case*) find_first (eq3 f d) itms (*of*);
  23.369 +val ts' = inter op = (o_model_values itm_) ts;
  23.370 +            (*if*) subset op = (ts, ts') (*else*);
  23.371 +val return_is_notyet_input = ("", 
  23.372 +           ori_2itm itm_ pid all (i, v, f, d, subtract op = ts' ts));
  23.373 +"~~~~~ fun ori_2itm , args:"; val (itm_, pid, all, (id, vt, fd, d, ts)) =
  23.374 +  (itm_, pid, all, (i, v, f, d, subtract op = ts' ts));
  23.375 +    val ts' = union op = (o_model_values itm_) ts;
  23.376 +    val pval = [Input_Descript.join'''' (d, ts')]
  23.377 +    val complete = if eq_set op = (ts', all) then true else false
  23.378 +
  23.379 +(*+*)val "Inc Constants [] , pen2str" = itm_ |> I_Model.feedback_to_string ctxt
  23.380 +(*\\\----------------- step into specify_do_next -------------------------------------------//*)
  23.381 +(*\\------------------ step into do_next ---------------------------------------------------//*)
  23.382 +val ("ok", (ts as (_, _, _) :: _, _, (pt, p))) = return_do_next
  23.383 +
  23.384 +(*|------------------- continue with me_Model_Problem ----------------------------------------*)
  23.385 +val tacis as (_::_) =
  23.386 +        (*case*) ts (*of*);
  23.387 +          val (tac, _, _) = last_elem tacis
  23.388 +
  23.389 +val return_Model_Problem = (p, [] : NEW, TESTg_form ctxt (pt, p), tac, Celem.Sundef, pt);
  23.390 +(*//------------------ step into TESTg_form ------------------------------------------------\\*)
  23.391 +"~~~~~ fun TESTg_form , args:"; val (ctxt, ptp) = (ctxt, (pt, p));
  23.392 +
  23.393 +    val (form, _, _) =
  23.394 +   ME_Misc.pt_extract ctxt ptp;
  23.395 +"~~~~~ fun pt_extract , args:"; val (ctxt, (pt, (p, p_(*Frm,Pbl*)))) = (ctxt, ptp);
  23.396 +        val ppobj = Ctree.get_obj I pt p
  23.397 +        val f = if Ctree.is_pblobj ppobj then pt_model ppobj p_ else Ctree.get_obj pt_form pt p;
  23.398 +          (*if*) Ctree.is_pblobj ppobj (*then*);
  23.399 +
  23.400 +           pt_model ppobj p_;
  23.401 +"~~~~~ fun pt_model , args:"; val ((Ctree.PblObj {probl, spec, origin = (_, o_spec, hdl), ctxt, ...}), 
  23.402 +  Pbl(*Frm,Pbl*)) = (ppobj, p_);
  23.403 +      val (_, _, met_id) = References.select_input o_spec spec
  23.404 +      val (allcorr, _) = Pre_Conds.check_internal ctxt (I_Model.OLD_to_TEST probl) (Pos.Met, met_id)
  23.405 +val return_pt_model = Ctree.ModSpec (allcorr, Pos.Pbl, hdl, probl, (*where_*)[(*Problem.from_store in check*)], spec)
  23.406 +
  23.407 +(*|------------------- continue with TESTg_form ----------------------------------------------*)
  23.408 +val Ctree.ModSpec (spec as (_, p_, _, gfr, where_, _)) =
  23.409 +    (*case*) form (*of*);
  23.410 +    Test_Out.PpcKF (  (Test_Out.Problem [],
  23.411 + 			P_Model.from (Proof_Context.theory_of ctxt) gfr where_));
  23.412 +
  23.413 +   P_Model.from (Proof_Context.theory_of ctxt) gfr where_;
  23.414 +"~~~~~ fun from , args:"; val (thy, itms, where_) = ((Proof_Context.theory_of ctxt), gfr, where_);
  23.415 +    fun coll model [] = model
  23.416 +      | coll model ((_, _, _, field, itm_) :: itms) =
  23.417 +        coll (add_sel_ppc thy field model (item_from_feedback thy itm_)) itms;
  23.418 +
  23.419 + val gfr = coll P_Model.empty itms;
  23.420 +"~~~~~ fun coll , args:"; val (model, ((aaa, bbb_,ccc_, field, itm_) :: itms))
  23.421 +  = (P_Model.empty, itms);
  23.422 +
  23.423 +(*+*)val 4 = length itms;
  23.424 +(*+*)val itm = nth 1 itms;
  23.425 +
  23.426 +           coll P_Model.empty [itm];
  23.427 +"~~~~~ fun coll , iterate:"; val (model, ((aaa, bbb_,ccc_, field, itm_) :: []))
  23.428 +  = (P_Model.empty, [itm]);
  23.429 +
  23.430 +          (add_sel_ppc thy field model (item_from_feedback thy itm_));
  23.431 +"~~~~~ fun add_sel_ppc , args:"; val ((_: theory), sel, {Given = gi, Where = wh, Find = fi, With = wi, Relate = re}, x )
  23.432 +  = (thy, field, model, (item_from_feedback thy itm_));
  23.433 +
  23.434 +   P_Model.item_from_feedback thy itm_;
  23.435 +"~~~~~ fun item_from_feedback , args:"; val (thy, (I_Model.Inc ((d, ts), _))) = (thy, itm_);
  23.436 +   P_Model.Incompl (UnparseC.term_in_thy thy (Input_Descript.join (d, ts)));
  23.437 +(*\\------------------ step into TESTg_form ------------------------------------------------//*)
  23.438 +(*\------------------- step into me_Model_Problem ------------------------------------------//*)
  23.439 +val (p, _, f, nxt, _, pt) = return_me_Model_Problem
  23.440 +
  23.441 +(*+++*)val {probl, ...} = Calc.specify_data (pt, pos);
  23.442 +(*+++*)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)]"
  23.443 + = probl |> I_Model.to_string ctxt
  23.444 +(*-------------------- contine me's ----------------------------------------------------------*)
  23.445 +val return_me_add_find_Constants = me nxt p c pt;
  23.446 +                                      val Add_Find "Maximum A" = #4 return_me_add_find_Constants;
  23.447 +(*/------------------- step into me_add_find_Constants -------------------------------------\\*)
  23.448 +(*==================== done in "Minisubpbl/150a-add-given-Maximum.sml" subsequently =======================*)
    24.1 --- a/test/Tools/isac/Minisubpbl/150a-add-given-Maximum.sml	Sun Oct 29 07:14:14 2023 +0100
    24.2 +++ b/test/Tools/isac/Minisubpbl/150a-add-given-Maximum.sml	Thu Nov 16 08:15:46 2023 +0100
    24.3 @@ -13,19 +13,7 @@
    24.4    Nesting is indicated by  /---   //--   ///-  at the left margin of the comments.
    24.5  *)
    24.6  
    24.7 -open Ctree;
    24.8 -open Pos;
    24.9 -open TermC;
   24.10 -open Istate;
   24.11 -open Tactic;
   24.12 -open I_Model;
   24.13 -open P_Model
   24.14 -open Rewrite;
   24.15 -open Step;
   24.16 -open LItool;
   24.17 -open LI;
   24.18 -open Test_Code
   24.19 -open Specify
   24.20 +open Model_Def
   24.21  open ME_Misc
   24.22  open Pre_Conds;
   24.23  
   24.24 @@ -78,391 +66,10 @@
   24.25             make_environments model_patt i_model;
   24.26  "~~~~~ fun make_environments , args:"; val (_, []) = (model_patt, i_model);
   24.27  (*\------------------- step into init_calc -------------------------------------------------//*)
   24.28 -val (p,_,f,nxt,_,pt) = return_init_calc;
   24.29 -
   24.30 -(*+*)val PblObj {ctxt, probl, ...} = get_obj I pt [];
   24.31 -(*+*)Proof_Context.theory_of ctxt (*= {Pure, .., Diff_App}*);
   24.32 -(*+*)val Free ("r", Type ("Real.real", [])) = Syntax.read_term ctxt "r"
   24.33 -(*+*)val [] = probl
   24.34 -
   24.35 -val return_me_Model_Problem = 
   24.36 -           me nxt p c pt; val Add_Given "Constants [r = 7]" = #4 return_me_Model_Problem;
   24.37 -(*/------------------- step into me Model_Problem ------------------------------------------\\*)
   24.38 -"~~~~~ fun me , args:"; val (tac, (p:Pos.pos'), (_:Test_Code.NEW), (pt:Ctree.ctree)) = (nxt, p, c, pt);
   24.39 -      val ctxt = Ctree.get_ctxt pt p
   24.40 -val return_by_tactic = case
   24.41 -      Step.by_tactic tac (pt,p) of
   24.42 -		    ("ok", (_, _, ptp)) => ptp;
   24.43 -
   24.44 -(*//------------------ step into by_tactic -------------------------------------------------\\*)
   24.45 -"~~~~~ fun by_tactic , args:"; val (tac, (ptp as (pt, p))) = (tac, (pt,p));
   24.46 -val Applicable.Yes tac' = (*case*)
   24.47 -      Step.check tac (pt, p) (*of*);
   24.48 -(*+*)val Model_Problem' _ = tac';
   24.49 -"~~~~~ fun check , args:"; val (tac, (ctree, pos)) = (tac, (pt, p));
   24.50 -  (*if*) Tactic.for_specify tac (*then*);
   24.51 -
   24.52 -Specify_Step.check tac (ctree, pos);
   24.53 -"~~~~~ fun check , args:"; val (Tactic.Model_Problem, (pt, pos as (p, _))) =
   24.54 -  (tac, (ctree, pos));
   24.55 -        val (o_model, pI', ctxt) = case Ctree.get_obj I pt p of
   24.56 -          Ctree.PblObj {origin = (o_model, (_, pI', _), _), ctxt, ...} => (o_model, pI', ctxt)
   24.57 -	      val {model = model_patt, ...} = Problem.from_store (Ctree.get_ctxt pt pos) pI'
   24.58 -	      val pbl = I_Model.init_TEST o_model model_patt;
   24.59 -
   24.60 -val return_check =
   24.61 -    Applicable.Yes (Tactic.Model_Problem' (pI', I_Model.TEST_to_OLD pbl, []));
   24.62 -(*\\------------------ step into by_tactic -------------------------------------------------//*)
   24.63 -val (pt, p) = return_by_tactic;
   24.64 -
   24.65 -val return_do_next = (*case*)
   24.66 -      Step.do_next p ((pt, Pos.e_pos'), []) (*of*);
   24.67 -(*//------------------ step into do_next ---------------------------------------------------\\*)
   24.68 -"~~~~~ fun do_next , args:"; val (((ip as (_,p_)):pos'), ((ptp as (pt,p), tacis):Calc.state_pre)) =
   24.69 -  (p, ((pt, e_pos'),[]));
   24.70 -    val pIopt = get_pblID (pt,ip);
   24.71 -    (*if*) ip = ([],Res); (* = false*)
   24.72 -      val _ = (*case*) tacis (*of*);
   24.73 -      val SOME _ = (*case*) pIopt (*of*);
   24.74 -
   24.75 -    val ("ok", ([(Add_Given "Constants [r = 7]", _, _)], [], _)) =
   24.76 -      Step.switch_specify_solve p_ (pt, ip);
   24.77 -"~~~~~ fun switch_specify_solve , args:"; val (state_pos, (pt, input_pos)) = (p_, (pt, ip));
   24.78 -      (*if*) Pos.on_specification ([], state_pos) (*then*);
   24.79 -
   24.80 -    val ("ok", ([(Add_Given "Constants [r = 7]", _, _)], [], _)) =
   24.81 -      Step.specify_do_next (pt, input_pos);
   24.82 -(*///----------------- step into specify_do_next -------------------------------------------\\*)
   24.83 -"~~~~~ fun specify_do_next , args:"; val (ptp as (pt, (p, p_))) = (pt, input_pos);
   24.84 -
   24.85 -(*  val (_, (p_', tac)) =*)
   24.86 -val return_find_next_step = (*keep for continuing specify_do_next*)
   24.87 -   Specify.find_next_step ptp;
   24.88 -(*////---------------- step into find_next_step --------------------------------------------\\*)
   24.89 -"~~~~~ fun find_next_step , args:"; val ((pt, pos as (_, p_))) = (ptp);
   24.90 -    val {meth = met, origin = origin as (oris, o_refs as (_, pI', mI'), _), probl = pbl,
   24.91 -      spec = refs, ...} = Calc.specify_data (pt, pos);
   24.92 -    val ctxt = Ctree.get_ctxt pt pos;
   24.93 -      (*if*) Ctree.just_created (pt, pos) andalso origin <> Ctree.e_origin (*else*);
   24.94 -        (*if*) p_ = Pos.Pbl (*then*);
   24.95 -
   24.96 -   Specify.for_problem ctxt oris (o_refs, refs) (pbl, met);
   24.97 -(*/////--------------- step into for_problem -----------------------------------------------\\*)
   24.98 -"~~~~~ fun for_problem , args:"; val (ctxt, oris, ((dI', pI', mI'), (dI, pI, mI)), (pbl, met))
   24.99 -  = (ctxt, oris, (o_refs, refs), (pbl, met));
  24.100 -    val cdI = if dI = ThyC.id_empty then dI' else dI;
  24.101 -    val cpI = if pI = Problem.id_empty then pI' else pI;
  24.102 -    val cmI = if mI = MethodC.id_empty then mI' else mI;
  24.103 -    val {model = pbt, where_rls, where_, ...} = Problem.from_store ctxt cpI;
  24.104 -    val {model = mpc, ...} = MethodC.from_store ctxt cmI;
  24.105 -
  24.106 -    val return_check_OLD =
  24.107 -           check ctxt where_rls where_ (pbt, I_Model.OLD_to_TEST pbl);
  24.108 -(*//////-------------- step into check -------------------------------------------------\\*)
  24.109 -"~~~~~ fun check , args:"; val (ctxt, where_rls, pres, (model_patt, i_model)) =
  24.110 -  (ctxt, where_rls, where_, (pbt, I_Model.OLD_to_TEST pbl));
  24.111 -      val return_make_environments =
  24.112 -           make_environments model_patt i_model;
  24.113 -(*///// //------------ step into of_max_variant --------------------------------------------\\*)
  24.114 -"~~~~~ fun of_max_variant , args:"; val (model_patt, i_model) =
  24.115 -  (model_patt, i_model);
  24.116 -
  24.117 -(*+*)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))]"
  24.118 - = i_model |> I_Model.to_string_TEST @{context}
  24.119 -    val all_variants =
  24.120 -        map (fn (_, variants, _, _, _) => variants) i_model
  24.121 -        |> flat
  24.122 -        |> distinct op =
  24.123 -    val variants_separated = map (filter_variants' i_model) all_variants
  24.124 -    val sums_corr = map (Model_Def.cnt_corrects) variants_separated
  24.125 -    val sum_variant_s = Model_Def.arrange_args sums_corr (1, all_variants)
  24.126 -(*+*)val [(0, 1), (0, 2), (0, 3)] = sum_variant_s
  24.127 -    val (_, max_variant) = hd (*..crude decision, up to improvement *)
  24.128 -      (sort (fn ((i, _), (j, _)) => int_ord (i, j)) sum_variant_s)
  24.129 -    val i_model_max =
  24.130 -      filter (fn (_, variants, _ , _ ,_) => member (op =) variants max_variant) i_model
  24.131 -    val equal_descr_pairs = map (get_equal_descr i_model) model_patt |> flat
  24.132 -(*for building make_env_s -------------------------------------------------------------------\*)
  24.133 -(*!!!*) val ("#Given", (descr, term), pos) =
  24.134 -  Model_Pattern.split_descriptor ctxt ("#Given", @{term "Constants [r = (7::real)]"}, Position.none)
  24.135 -(*!!!*) val patt = equal_descr_pairs |> hd |> #1
  24.136 -(*!!!*)val equal_descr_pairs =
  24.137 -  (patt,
  24.138 -  (1, [1, 2, 3], true, "#Given", (Cor_TEST ((descr, (*!*)TermC.isalist2list(*!*) term)), pos)))
  24.139 -  :: tl equal_descr_pairs
  24.140 -(*for building make_env_s -------------------------------------------------------------------/*)
  24.141 -
  24.142 -    val env_model = make_env_model equal_descr_pairs;
  24.143 -(*///// ///----------- step into make_env_model --------------------------------------------\\*)
  24.144 -"~~~~~ fun make_env_model , args:"; val (equal_descr_pairs) = (equal_descr_pairs);
  24.145 -
  24.146 -val xxx = (fn ((_, (_, id)), (_, _, _, _, (feedb, _)))
  24.147 -       => (mk_env_model id feedb));
  24.148 -val ((_, (_, id)), (_, _, _, _, (feedb, _))) = nth 4 equal_descr_pairs;
  24.149 -(*\\\\\ \\\----------- step into make_env_model --------------------------------------------//*)
  24.150 -(*||||| ||------------ contine of_max_variant ------------------------------------------------*)
  24.151 -
  24.152 -    val equal_givens = filter (fn ((m_field, _), _) => m_field = "#Given") equal_descr_pairs
  24.153 -    val subst_eval_list = make_envs_preconds equal_givens
  24.154 -val return_make_envs_preconds =
  24.155 -           make_envs_preconds equal_givens;
  24.156 -(*///// ///----------- step into make_envs_preconds ----------------------------------------\\*)
  24.157 -"~~~~~ fun make_envs_preconds , args:"; val (equal_givens) = (equal_givens);
  24.158 -val xxx = (fn ((_, (_, id)), (_, _, _, _, (feedb, _))) => discern_feedback id feedb)
  24.159 -;
  24.160 -xxx: (Model_Pattern.single * I_Model.single_TEST) -> ((term * term) * (term * term)) list;
  24.161 -val return_discern_feedback =
  24.162 -           discern_feedback id feedb;
  24.163 -(*nth 1 equal_descr_pairs* )
  24.164 -"~~~~~ fun discern_feedback , args:"; val (id, (Model_Def.Cor_TEST ((descr, ts), _))) = (id, feedb);
  24.165 -( *nth 2 equal_descr_pairs*)
  24.166 -"~~~~~ fun discern_feedback , args:"; val (id, (Model_Def.Inc_TEST ((descr, ts)))) = (id, feedb);
  24.167 -
  24.168 -(*nth 1 equal_descr_pairs* )
  24.169 -(*+*)val [((Const ("fixes", typ1), Free ("r", typ2)),
  24.170 -           (Free ("r", typ3), value))] = return_discern_feedback
  24.171 -(*+*)val true = typ1 = typ2
  24.172 -(*+*)val true = typ3 = HOLogic.realT
  24.173 -(*+*)val "7" = UnparseC.term @{context} value
  24.174 -( *nth 2 equal_descr_pairs*)
  24.175 -(*+*)val [] = return_discern_feedback
  24.176 -
  24.177 -val return_discern_typ =
  24.178 -           discern_typ id (descr, ts);
  24.179 -"~~~~~ fun discern_typ , args:"; val (id, (descr, ts)) = (id, (descr, ts));
  24.180 -(*nth 1 equal_descr_pairs* )
  24.181 -(*+*)val [((Const ("fixes", typ1), Free ("r", typ2)),
  24.182 -           (Free ("r", typ3), value))] = return_discern_typ
  24.183 -(*+*)val true = typ1 = typ2
  24.184 -(*+*)val true = typ3 = HOLogic.realT
  24.185 -(*+*)val "7" = UnparseC.term @{context} value
  24.186 -( *nth 2 equal_descr_pairs*)
  24.187 -(*+*)val [] = return_discern_typ;
  24.188 -(**)
  24.189 -           switch_type id ts;
  24.190 -"~~~~~ fun switch_type , args:"; val (Const (descr_string, _), ts) = (descr, ts);
  24.191 -
  24.192 -(*nth 1 equal_descr_pairs* )
  24.193 -val return_switch_type_TEST = Const (descr_string, ts |> hd |> TermC.lhs |> type_of)
  24.194 -
  24.195 -(*+*)val Const ("Input_Descript.Constants", typ) = return_switch_type_TEST
  24.196 -(*+*)val Type ("Real.real", []) = typ
  24.197 -( *nth 2 equal_descr_pairs*)
  24.198 -(*+*)val return_switch_type_TEST = descr
  24.199 -(**)
  24.200 -(*\\\\\ \\\----------- step into make_envs_preconds ----------------------------------------//*)
  24.201 -(*||||| ||------------ contine of_max_variant ------------------------------------------------*)
  24.202 -    val subst_eval_list = make_envs_preconds equal_givens
  24.203 -    val (env_subst, env_eval) = split_list subst_eval_list
  24.204 -val make_environments = (i_model_max, env_model, (env_subst, env_eval)); (*GOON*)
  24.205 -(*\\\\\ \\------------ step into of_max_variant --------------------------------------------//*)
  24.206 -      val (i_model_max, env_model, (env_subst, env_eval)) = make_environments
  24.207 -(*!!!/----- we had a helpful argument for constructing env_model and (env_subst, env_eval)---\*)
  24.208 -      val (i_max_variant, env_model, (env_subst, env_eval)) = (i_model_max, [], ([], []))
  24.209 -(*!!!\----- we had a helpful argument for constructing env_model and (env_subst, env_eval)---/*) 
  24.210 -(*||||||-------------- contine check -----------------------------------------------------*)
  24.211 -      val pres_subst = map (TermC.subst_atomic_all env_subst) pres;
  24.212 -      val pres_subst_other = map (TermC.subst_atomic_all env_model) (map #2 pres_subst);
  24.213 -      val full_subst = if env_eval = [] then pres_subst_other
  24.214 -        else map (TermC.subst_atomic_all env_eval) (map #2 pres_subst_other)
  24.215 -      val evals = map (eval ctxt where_rls) full_subst
  24.216 -val return_ = (i_model_max, env_subst, env_eval)
  24.217 -(*\\\\\\\------------- step into check -------------------------------------------------//*)
  24.218 -val (preok, _) = return_check_OLD;
  24.219 -
  24.220 -(*|||||--------------- contine for_problem ---------------------------------------------------*)
  24.221 -    (*if*) dI' = ThyC.id_empty andalso dI = ThyC.id_empty (*else*);
  24.222 -      (*if*) pI' = Problem.id_empty andalso pI = Problem.id_empty (*else*);
  24.223 -val NONE =
  24.224 -     (*case*) find_first (I_Model.is_error o #5) pbl (*of*);
  24.225 -
  24.226 -        (*case*)
  24.227 -   Specify.item_to_add (ThyC.get_theory ctxt
  24.228 -            (if dI = ThyC.id_empty then dI' else dI)) oris pbt pbl (*of*);
  24.229 -"~~~~~ fun item_to_add , args:"; val (thy, oris, _, itms)
  24.230 -  = ((ThyC.get_theory ctxt (if dI = ThyC.id_empty then dI' else dI)), oris, pbt, pbl);
  24.231 -      fun false_and_not_Sup (_, _, false, _, I_Model.Sup _) = false
  24.232 -        | false_and_not_Sup (_, _, false, _, _) = true
  24.233 -        | false_and_not_Sup _ = false
  24.234 -
  24.235 -      val v = if itms = [] then 1 else Pre_Conds.max_variant itms
  24.236 -      val vors = if v = 0 then oris
  24.237 -        else filter ((fn variant =>
  24.238 -            fn (_, variants, m_field, _, _) => member op= variants variant andalso m_field <> "#undef")
  24.239 -          v) oris
  24.240 -
  24.241 -(*+*)val "[\n(1, [\"1\", \"2\", \"3\"], #Given, Constants, [\"[r = 7]\"]), \n(2, [\"1\", \"2\", \"3\"], #Find, Maximum, [\"A\"]), \n(3, [\"1\", \"2\", \"3\"], #Find, AdditionalValues, [\"[u]\", \"[v]\"]), \n(4, [\"1\", \"2\", \"3\"], #Relate, Extremum, [\"A = 2 * u * v - u \<up> 2\"]), \n(5, [\"1\", \"2\"], #Relate, SideConditions, [\"[(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2]\"])]"
  24.242 -(*+*)  = vors |> O_Model.to_string @{context}
  24.243 -
  24.244 -      val vits = if v = 0 then itms               (* because of dsc without dat *)
  24.245 -  	    else filter ((fn variant =>
  24.246 -            fn (_, variants, _, _, _) => member op= variants variant)
  24.247 -          v) itms;                                (* itms..vat *)
  24.248 -
  24.249 -      val icl = filter false_and_not_Sup vits;    (* incomplete *)
  24.250 -
  24.251 -      (*if*) icl = [] (*else*);
  24.252 -(*+*)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)]"
  24.253 - = icl |> I_Model.to_string @{context}
  24.254 -(*+*)val "(1 ,[1, 2, 3] ,false ,#Given ,Inc Constants [] , pen2str)"
  24.255 - = hd icl |> I_Model.single_to_string @{context}
  24.256 -
  24.257 -(*++*)val feedback = (fn (_, _, _, _, feedback) => feedback) (hd icl)
  24.258 -(*++*)val Const ("Input_Descript.Constants", _) = I_Model.descriptor feedback
  24.259 -(*++*)val [] = I_Model.o_model_values feedback
  24.260 -
  24.261 -(*+*)val "[\n(1, [\"1\", \"2\", \"3\"], #Given, Constants, [\"[r = 7]\"]), \n(2, [\"1\", \"2\", \"3\"], #Find, Maximum, [\"A\"]), \n(3, [\"1\", \"2\", \"3\"], #Find, AdditionalValues, [\"[u]\", \"[v]\"]), \n(4, [\"1\", \"2\", \"3\"], #Relate, Extremum, [\"A = 2 * u * v - u \<up> 2\"]), \n(5, [\"1\", \"2\"], #Relate, SideConditions, [\"[(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2]\"])]"
  24.262 -(*+*)  = vors |> O_Model.to_string @{context}
  24.263 -
  24.264 -val SOME ori =
  24.265 -        (*case*) find_first ((fn (_, _, _, _, feedback) => fn (_, _, _, d, ts) =>
  24.266 -           d = I_Model.descriptor feedback andalso subset op = (I_Model.o_model_values feedback, ts))
  24.267 -         (hd icl)) vors (*of*);
  24.268 -
  24.269 -(*+*)val "(1, [\"1\", \"2\", \"3\"], #Given, Constants, [\"[r = 7]\"])" =
  24.270 -(*+*)  ori |> O_Model.single_to_string @{context}
  24.271 -(*\\\\\--------------- step into for_problem -----------------------------------------------//*)
  24.272 -(*\\\\---------------- step into find_next_step --------------------------------------------//*)
  24.273 -(*|||----------------- continuing specify_do_next --------------------------------------------*)
  24.274 -val (_, (p_', tac)) = return_find_next_step (*kept for continuing specify_do_next*)
  24.275 -
  24.276 -    val ist_ctxt =  Ctree.get_loc pt (p, p_)
  24.277 -(*+*)val Add_Given "Constants [r = 7]" = tac
  24.278 -val _ =
  24.279 -    (*case*) tac (*of*);
  24.280 -
  24.281 -Step_Specify.by_tactic_input tac (pt, (p, p_'));
  24.282 -"~~~~~ fun by_tactic_input , args:"; val ((Tactic.Add_Given ct), ptp) =
  24.283 -  (tac, (pt, (p, p_')));
  24.284 -
  24.285 -   Specify.by_Add_ "#Given" ct ptp;
  24.286 -"~~~~~ fun by_Add_ , args:"; val (m_field, ct ,(pt, pos as (_, p_))) =
  24.287 -  ("#Given", ct, ptp);
  24.288 -    val (met, oris, (_, pI', mI'), pbl, (_, pI, mI), ctxt) = SpecificationC.get_data (pt, pos)
  24.289 -    val (i_model, m_patt) =
  24.290 -       if p_ = Pos.Met then
  24.291 -         (met,
  24.292 -           (if mI = MethodC.id_empty then mI' else mI) |> MethodC.from_store ctxt |> #model)
  24.293 -       else
  24.294 -         (pbl,
  24.295 -           (if pI = Problem.id_empty then pI' else pI) |> Problem.from_store ctxt |> #model);
  24.296 -
  24.297 -      (*case*)
  24.298 -   I_Model.check_single ctxt m_field oris i_model m_patt ct (*of*);
  24.299 -"~~~~~ fun check_single , args:"; val (ctxt, m_field, o_model, i_model, m_patt, (str(*, pos*))) =
  24.300 -  (ctxt, m_field, oris, i_model, m_patt, ct);
  24.301 -        val (t as (descriptor $ _)) = Syntax.read_term ctxt str
  24.302 -
  24.303 -(*+*)val "Constants [r = 7]" = UnparseC.term @{context} t;
  24.304 -
  24.305 -        val SOME m_field' =
  24.306 -          (*case*) Model_Pattern.get_field descriptor m_patt (*of*);
  24.307 -           (*if*) m_field <> m_field' (*else*);
  24.308 -
  24.309 -(*+*)val "#Given" = m_field; val "#Given" = m_field'
  24.310 -
  24.311 -val ("", ori', all) =
  24.312 -          (*case*) O_Model.contains ctxt m_field o_model t (*of*);
  24.313 -
  24.314 -(*+*)val (_, _, _, _, vals) = hd o_model;
  24.315 -(*+*)val "Constants [r = 7]" = UnparseC.term @{context} (@{term Constants} $ (hd vals));
  24.316 -(*+*)if "[\n(1, [\"1\", \"2\", \"3\"], #Given, Constants, [\"[r = 7]\"]), " ^ 
  24.317 -(*+*)    "\n(2, [\"1\", \"2\", \"3\"], #Find, Maximum, [\"A\"]), " ^ 
  24.318 -(*+*)    "\n(3, [\"1\", \"2\", \"3\"], #Find, AdditionalValues, [\"[u]\", \"[v]\"]), " ^ 
  24.319 -(*+*)    "\n(4, [\"1\", \"2\", \"3\"], #Relate, Extremum, [\"A = 2 * u * v - u \<up> 2\"]), " ^ 
  24.320 -(*+*)    "\n(5, [\"1\", \"2\"], #Relate, SideConditions, [\"[(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2]\"]), " ^ 
  24.321 -(*+*)    "\n(6, [\"3\"], #Relate, SideConditions, [\"[u / 2 = r * sin \<alpha>]\", \"[2 / v = r * cos \<alpha>]\"]), " ^ 
  24.322 -(*+*)    "\n(7, [\"1\"], #undef, FunctionVariable, [\"a\"]), " ^ 
  24.323 -(*+*)    "\n(8, [\"2\"], #undef, FunctionVariable, [\"b\"]), \n(9, [\"3\"], #undef, FunctionVariable, [\"\<alpha>\"]), " ^ 
  24.324 -(*+*)    "\n(10, [\"1\", \"2\"], #undef, Input_Descript.Domain, [\"{0<..<r}\"]), " ^ 
  24.325 -(*+*)    "\n(11, [\"3\"], #undef, Input_Descript.Domain, [\"{0<..<\<pi> / 2}\"]), " ^ 
  24.326 -(*+*)    "\n(12, [\"1\", \"2\", \"3\"], #undef, ErrorBound, [\"\<epsilon> = 0\"])]"
  24.327 -(*+*)= O_Model.to_string @{context} o_model then () else error "o_model CHANGED";
  24.328 -
  24.329 -  (*case*) is_notyet_input ctxt i_model all ori' m_patt (*of*);
  24.330 -"~~~~~ fun is_notyet_input , args:"; val (ctxt, itms, all, (i, v, f, d, ts), pbt) =
  24.331 -  (ctxt, i_model, all, ori', m_patt);
  24.332 -val SOME (_, (_, pid)) =
  24.333 -  (*case*) find_first (eq1 d) pbt (*of*);
  24.334 -(*local*)fun eq3 f d (_, _, _, f', itm_) = f = f' andalso d = (I_Model.descriptor itm_);(*local*)
  24.335 -val SOME (_, _, _, _, itm_) =
  24.336 -    (*case*) find_first (eq3 f d) itms (*of*);
  24.337 -val ts' = inter op = (o_model_values itm_) ts;
  24.338 -            (*if*) subset op = (ts, ts') (*else*);
  24.339 -val return_is_notyet_input = ("", 
  24.340 -           ori_2itm itm_ pid all (i, v, f, d, subtract op = ts' ts));
  24.341 -"~~~~~ fun ori_2itm , args:"; val (itm_, pid, all, (id, vt, fd, d, ts)) =
  24.342 -  (itm_, pid, all, (i, v, f, d, subtract op = ts' ts));
  24.343 -    val ts' = union op = (o_model_values itm_) ts;
  24.344 -    val pval = [Input_Descript.join'''' (d, ts')]
  24.345 -    val complete = if eq_set op = (ts', all) then true else false
  24.346 -
  24.347 -(*+*)val "Inc Constants [] , pen2str" = itm_ |> I_Model.feedback_to_string @{context}
  24.348 -(*\\\----------------- step into specify_do_next -------------------------------------------//*)
  24.349 -(*\\------------------ step into do_next ---------------------------------------------------//*)
  24.350 -val ("ok", (ts as (_, _, _) :: _, _, (pt, p))) = return_do_next
  24.351 -
  24.352 -(*|------------------- continue with me_Model_Problem ----------------------------------------*)
  24.353 -
  24.354 -val tacis as (_::_) =
  24.355 -        (*case*) ts (*of*);
  24.356 -          val (tac, _, _) = last_elem tacis
  24.357 -
  24.358 -val return_Model_Problem = (p, [] : NEW, TESTg_form ctxt (pt, p), tac, Celem.Sundef, pt);
  24.359 -(*//------------------ step into TESTg_form ------------------------------------------------\\*)
  24.360 -"~~~~~ fun TESTg_form , args:"; val (ctxt, ptp) = (ctxt, (pt, p));
  24.361 -
  24.362 -    val (form, _, _) =
  24.363 -   ME_Misc.pt_extract ctxt ptp;
  24.364 -"~~~~~ fun pt_extract , args:"; val (ctxt, (pt, (p, p_(*Frm,Pbl*)))) = (ctxt, ptp);
  24.365 -        val ppobj = Ctree.get_obj I pt p
  24.366 -        val f = if Ctree.is_pblobj ppobj then pt_model ppobj p_ else Ctree.get_obj pt_form pt p;
  24.367 -          (*if*) Ctree.is_pblobj ppobj (*then*);
  24.368 -
  24.369 -           pt_model ppobj p_;
  24.370 -"~~~~~ fun pt_model , args:"; val ((Ctree.PblObj {probl, spec, origin = (_, o_spec, hdl), ctxt, ...}), 
  24.371 -  Pbl(*Frm,Pbl*)) = (ppobj, p_);
  24.372 -      val (_, _, met_id) = References.select_input o_spec spec
  24.373 -      val (allcorr, _) = Pre_Conds.check_internal ctxt (I_Model.OLD_to_TEST probl) (Pos.Met, met_id)
  24.374 -val return_pt_model = Ctree.ModSpec (allcorr, Pos.Pbl, hdl, probl, (*where_*)[(*Problem.from_store in check*)], spec)
  24.375 -
  24.376 -(*|------------------- continue with TESTg_form ----------------------------------------------*)
  24.377 -val Ctree.ModSpec (spec as (_, p_, _, gfr, where_, _)) =
  24.378 -    (*case*) form (*of*);
  24.379 -    Test_Out.PpcKF (  (Test_Out.Problem [],
  24.380 - 			P_Model.from (Proof_Context.theory_of ctxt) gfr where_));
  24.381 -
  24.382 -   P_Model.from (Proof_Context.theory_of ctxt) gfr where_;
  24.383 -"~~~~~ fun from , args:"; val (thy, itms, where_) = ((Proof_Context.theory_of ctxt), gfr, where_);
  24.384 -    fun coll model [] = model
  24.385 -      | coll model ((_, _, _, field, itm_) :: itms) =
  24.386 -        coll (add_sel_ppc thy field model (item_from_feedback thy itm_)) itms;
  24.387 -
  24.388 - val gfr = coll P_Model.empty itms;
  24.389 -"~~~~~ fun coll , args:"; val (model, ((aaa, bbb_,ccc_, field, itm_) :: itms))
  24.390 -  = (P_Model.empty, itms);
  24.391 -
  24.392 -(*+*)val 4 = length itms;
  24.393 -(*+*)val itm = nth 1 itms;
  24.394 -
  24.395 -           coll P_Model.empty [itm];
  24.396 -"~~~~~ fun coll , iterate:"; val (model, ((aaa, bbb_,ccc_, field, itm_) :: []))
  24.397 -  = (P_Model.empty, [itm]);
  24.398 -
  24.399 -          (add_sel_ppc thy field model (item_from_feedback thy itm_));
  24.400 -"~~~~~ fun add_sel_ppc , args:"; val ((_: theory), sel, {Given = gi, Where = wh, Find = fi, With = wi, Relate = re}, x )
  24.401 -  = (thy, field, model, (item_from_feedback thy itm_));
  24.402 -
  24.403 -   P_Model.item_from_feedback thy itm_;
  24.404 -"~~~~~ fun item_from_feedback , args:"; val (thy, (I_Model.Inc ((d, ts), _))) = (thy, itm_);
  24.405 -   P_Model.Incompl (UnparseC.term_in_thy thy (Input_Descript.join (d, ts)));
  24.406 -(*\\------------------ step into TESTg_form ------------------------------------------------//*)
  24.407 -(*\------------------- step into me Model_Problem ------------------------------------------//*)
  24.408 -val (p, _, f, nxt, _, pt) = return_me_Model_Problem
  24.409 -
  24.410 -(*-------------------- contine me's ----------------------------------------------------------*)
  24.411 -val return_me_add_find_Constants = me nxt p c pt;
  24.412 -                                      val Add_Find "Maximum A" = #4 return_me_add_find_Constants;
  24.413 +val (p,_,f,nxt,_,pt) = return_init_calc;   val Model_Problem = nxt
  24.414 +val (p, _, f, nxt, _, pt) = me nxt p c pt; val Add_Given "Constants [r = 7]" = nxt
  24.415 +val return_me_add_find_Constants =
  24.416 +           me nxt p c pt; val Add_Find "Maximum A" = #4 return_me_add_find_Constants;
  24.417  (*/------------------- step into me_add_find_Constants -------------------------------------\\*)
  24.418  "~~~~~ fun me , args:"; val (tac as Add_Given "Constants [r = 7]", p, _(*NEW remove*), pt) =
  24.419    (nxt, p, c, pt);
  24.420 @@ -477,48 +84,83 @@
  24.421  val Applicable.Yes tac' =
  24.422      (*case*) Specify_Step.check tac (pt, p) (*of*);
  24.423  	    (*if*) Tactic.for_specify' tac' (*then*);
  24.424 +
  24.425 +(** )val return_step_by_tactic =( **)
  24.426 +(**)val return_step_specify_by_tactic =(**)
  24.427  Step_Specify.by_tactic tac' ptp;
  24.428 +(*///----------------- step into Step_Specify.by_tactic ------------------------------------\\*)
  24.429  "~~~~~ fun by_tactic , args:"; val ((Tactic.Add_Given' (ct, _)), (pt, p)) = (tac', ptp);
  24.430  
  24.431 +(** )val calling_code =( **)
  24.432 +(**)val return_by_Add_ =(**)
  24.433     Specify.by_Add_ "#Given" ct (pt, p);
  24.434 +(*////---------------- step by_Add_ --------------------------------------------------------\\*)
  24.435  "~~~~~ fun by_Add_ , args:"; val (m_field, ct, (pt, pos as (_, p_))) = ("#Given", ct, (pt, p));
  24.436      val (met, oris, (_, pI', mI'), pbl, (_, pI, mI), ctxt) = SpecificationC.get_data (pt, pos);
  24.437 -(*  val (i_model, m_patt) =*)
  24.438 +
  24.439 +val false =
  24.440         (*if*) p_ = Pos.Met (*else*);
  24.441 -val return_by_Add_ =
  24.442 +val (i_model, m_patt) =
  24.443           (pbl,
  24.444             (if pI = Problem.id_empty then pI' else pI) |> Problem.from_store ctxt |> #model)
  24.445  val I_Model.Add i_single =
  24.446        (*case*) I_Model.check_single ctxt m_field oris i_model m_patt ct (*of*);
  24.447  
  24.448 -	          val i_model' =
  24.449 +(** )val i_model' =( **)
  24.450 +(**)val return_add_single =(**)
  24.451     I_Model.add_single (Proof_Context.theory_of ctxt) i_single i_model;
  24.452 +(*/////--------------- step add_single -----------------------------------------------------\\*)
  24.453  "~~~~~ fun add_single , args:"; val (thy, itm, model) =
  24.454    ((Proof_Context.theory_of ctxt), i_single, i_model);
  24.455      fun eq_untouched d (0, _, _, _, itm_) = (d = I_Model.descriptor itm_)
  24.456        | eq_untouched _ _ = false
  24.457      val model' = case I_Model.seek_ppc (#1 itm) model of
  24.458        SOME _ => overwrite_ppc thy itm model (*itm updated in is_notyet_input WN.11.03*)
  24.459 -
  24.460 -(*||------------------ contine Step.by_tactic ------------------------------------------------*)
  24.461 +(*\\\\\--------------- step add_single -----------------------------------------------------//*)
  24.462 +(*|||||--------------- step by_Add_ ----------------------------------------------------------*)
  24.463 +            val i_model' = return_add_single
  24.464 +(*+++*)val "[\n(1 ,[1, 2, 3] ,true ,#Given ,Cor Constants [r = 7] , 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)]"
  24.465 + = i_model' |> I_Model.to_string ctxt
  24.466 +            val tac' = I_Model.make_tactic m_field (ct, i_model')
  24.467 +	          val  (_, _, _, pt') =  Specify_Step.add tac' (Istate_Def.Uistate, ctxt) (pt, pos)
  24.468 +val return_by_Add_step =
  24.469 +            ("ok", ([(Tactic.input_from_T ctxt tac', tac', (pos, (Istate_Def.Uistate, ctxt)))],
  24.470 +              [], (pt', pos)))
  24.471 +(*+++*)val {probl, ...} = Calc.specify_data (pt', pos);
  24.472 +(*+++*)val "[\n(1 ,[1, 2, 3] ,true ,#Given ,Cor Constants [r = 7] , 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)]"
  24.473 + = probl |> I_Model.to_string ctxt
  24.474 +(*\\\\---------------- step into by_Add_ ---------------------------------------------------//*)
  24.475 +val return_by_tactic_step = return_by_Add_
  24.476 +(*\\\----------------- step into Step_Specify.by_tactic ------------------------------------//*)
  24.477 +(*vvv--- this means, the return value of *)
  24.478 +val return_step_by_tactic_STEP = return_step_specify_by_tactic
  24.479  (*\\------------------ step into Step.by_tactic --------------------------------------------//*)
  24.480  val ("ok", (_, _, ptp)) = return_step_by_tactic;
  24.481  
  24.482 -      val (pt, p) = ptp;
  24.483 -        (*case*) 
  24.484 +(*+++*)val (pt, p) = ptp
  24.485 +(*+++*)val {probl, ...} = Calc.specify_data (pt, p);
  24.486 +(*+++*)val "[\n(1 ,[1, 2, 3] ,true ,#Given ,Cor Constants [r = 7] , 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)]"
  24.487 + = probl |> I_Model.to_string ctxt;
  24.488 +
  24.489 +      val (pt, p) = ptp; (*case*)
  24.490        Step.do_next p ((pt, Pos.e_pos'), []) (*of*);
  24.491  "~~~~~ fun do_next , args:"; val ((ip as (_, p_)), (ptp as (pt, p), tacis)) =
  24.492    (p, ((pt, Pos.e_pos'), []));
  24.493 +val false =
  24.494    (*if*) Pos.on_calc_end ip (*else*);
  24.495        val (_, probl_id, _) = Calc.references (pt, p);
  24.496  val _ =
  24.497        (*case*) tacis (*of*);
  24.498 +val false =
  24.499          (*if*) probl_id = Problem.id_empty (*else*);
  24.500  
  24.501 +
  24.502 +val ("ok", ([(Add_Find "Maximum A", _, _)], [], _)) =
  24.503             switch_specify_solve p_ (pt, ip);
  24.504  "~~~~~ fun switch_specify_solve , args:"; val (state_pos, (pt, input_pos)) = (p_, (pt, ip));
  24.505        (*if*) Pos.on_specification ([], state_pos) (*then*);
  24.506  
  24.507 +val ("ok", ([(Add_Find "Maximum A", _, _)], [], _)) =
  24.508             specify_do_next (pt, input_pos);
  24.509  "~~~~~ fun specify_do_next , args:"; val (ptp as (pt, (p, p_))) = (pt, input_pos);
  24.510      val (_, (p_', tac)) =
  24.511 @@ -527,16 +169,18 @@
  24.512      val {meth = met, origin = origin as (oris, o_refs as (_, pI', mI'), _), probl = pbl,
  24.513        spec = refs, ...} = Calc.specify_data (pt, pos);
  24.514      val ctxt = Ctree.get_ctxt pt pos;
  24.515 +(*+*)val "[\n(1 ,[1, 2, 3] ,true ,#Given ,Cor Constants [r = 7] , 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)]"
  24.516 + = pbl|> I_Model.to_string ctxt
  24.517  
  24.518 -(*+*)val (1, [1, 2, 3], true, "#Given", Cor ((Const ("Input_Descript.Constants", _), ts ), _)) :: _
  24.519 -  = pbl
  24.520 -(*+*)val "[[r = 7]]" = UnparseC.terms @{context} ts;
  24.521 -(*-----ML-^------^-HOL*)
  24.522 -
  24.523 +val false =
  24.524        (*if*) Ctree.just_created (pt, pos) andalso origin <> Ctree.e_origin (*else*); 
  24.525 +val true =
  24.526          (*if*) p_ = Pos.Pbl (*then*); 
  24.527  
  24.528 -           for_problem ctxt oris (o_refs, refs) (pbl, met);
  24.529 +(** )val ("dummy", (Pbl, Add_Find "Maximum A")) =( **)
  24.530 +(**)val return_for_problem as ("dummy", (Pbl, Add_Find "Maximum A"))=(**)
  24.531 +           for_problem ctxt oris (o_refs, refs) (pbl, I_Model.OLD_to_TEST met);
  24.532 +(*//------------------ step into for_problem -----------------------------------------------\\*)
  24.533  "~~~~~ fun for_problem , args:"; val (ctxt, oris, ((dI', pI', mI'), (dI, pI, mI)), (pbl, met)) =
  24.534    (ctxt, oris, (o_refs, refs), (pbl, met));
  24.535      val cpI = if pI = Problem.id_empty then pI' else pI;
  24.536 @@ -544,52 +188,206 @@
  24.537      val {model = pbt, where_rls, where_, ...} = Problem.from_store ctxt cpI;
  24.538      val {model = mpc, ...} = MethodC.from_store ctxt cmI
  24.539  
  24.540 -    val (preok, _) =
  24.541 +(** )val (preok, _) =( **)
  24.542 +(**)val return_check =(**)
  24.543  Pre_Conds.check ctxt where_rls where_ (pbt, I_Model.OLD_to_TEST pbl);
  24.544 +(*///----------------- step into Pre_Conds.check -------------------------------------------\\*)
  24.545  "~~~~~ fun check , args:"; val (ctxt, where_rls, pres, (model_patt, i_model)) =
  24.546    (ctxt, where_rls, where_, (pbt, I_Model.OLD_to_TEST pbl));
  24.547  
  24.548 -      val (_, (env_subst, env_eval)) = Pre_Conds.make_environments model_patt i_model;
  24.549 -"~~~~~ fun of_max_variant , args:"; val (model_patt, i_model) = (model_patt, i_model);
  24.550 -    val all_variants =
  24.551 -        map (fn (_, variants, _, _, _) => variants) i_model
  24.552 -        |> flat
  24.553 -        |> distinct op =
  24.554 -    val variants_separated = map (filter_variants' i_model) all_variants
  24.555 -    val sums_corr = map (Model_Def.cnt_corrects) variants_separated
  24.556 -    val sum_variant_s = Model_Def.arrange_args sums_corr (1, all_variants)
  24.557 -    val (_, max_variant) = hd (*..crude decision, up to improvement *)
  24.558 -      (sort (fn ((i, _), (j, _)) => int_ord (i, j)) sum_variant_s)
  24.559 -    val i_model_max =
  24.560 -      filter (fn (_, variants, _ , _ ,_) => member (op =) variants max_variant) i_model
  24.561 -    val equal_descr_pairs = map (get_equal_descr i_model) model_patt |> flat
  24.562 +(** )val (_, (env_subst, env_eval)) =( **)
  24.563 +(**)val return_make_environments =(**)
  24.564 +Pre_Conds.make_environments model_patt i_model;
  24.565 +(*////---------------- step into make_environments -----------------------------------------\\*)
  24.566 +"~~~~~ fun make_environments , args:"; val (model_patt, i_model) = (model_patt, i_model);
  24.567 +    val equal_descr_pairs = map (get_equal_descr i_model) model_patt
  24.568 +      |> flat
  24.569 +
  24.570      val env_model = make_env_model equal_descr_pairs
  24.571 +(** )val env_model =( **)
  24.572 +(**)val return_make_env_model =(**)
  24.573 +  make_env_model equal_descr_pairs;
  24.574 +(*/////--------------- step into make_env_model --------------------------------------------\\*)
  24.575 +"~~~~~ fun make_env_model , args:"; val (equal_descr_pairs) = (equal_descr_pairs);
  24.576 +val return_make_env_model_step =
  24.577 +  map (fn ((_, (_, id)), (_, _, _, _, (feedb, _)))
  24.578 +        => (mk_env_model id feedb)) equal_descr_pairs
  24.579 +  |> flat
  24.580 +(*map:*)val ((_, (_, id)), (_, _, _, _, (feedb, _))) = (nth 2 equal_descr_pairs);
  24.581 +
  24.582 +(*///// /------------- step into mk_env_model ----------------------------------------------\\*)
  24.583 +"~~~~~ fun mk_env_model , args:"; val (_, (Model_Def.Inc_TEST (_, []))) = (id, feedb);
  24.584 +(*+*)val (patt, imod) = nth 2 equal_descr_pairs
  24.585 +(*+*)val "(#Find, (Maximum, maxx))" = patt |> Model_Pattern.pat2str ctxt
  24.586 +(*+*)val "(2, [1, 2, 3], false ,#Find, (Inc_TEST Maximum __, Position.T))" = imod |> I_Model.single_to_string_TEST ctxt
  24.587 +
  24.588 +val return_mk_env_model_2_step = []
  24.589 +(*\\\\\ \------------- step into mk_env_model ----------------------------------------------//*)
  24.590 +(*\\\\\--------------- step into make_env_model --------------------------------------------//*)
  24.591 +val env_model = return_make_env_model;
  24.592 +
  24.593 +(*||||---------------- contine.. make_environments -------------------------------------------*)
  24.594      val equal_givens = filter (fn ((m_field, _), _) => m_field = "#Given") equal_descr_pairs
  24.595  
  24.596 -    val subst_eval_list =
  24.597 -           make_envs_preconds equal_givens;
  24.598 +(** )val subst_eval_list =( **)
  24.599 +(**)val return_make_envs_preconds =(**)
  24.600 +  make_envs_preconds equal_givens;
  24.601 +(*/////--------------- step into make_envs_preconds ----------------------------------------\\*)
  24.602  "~~~~~ fun make_envs_preconds , args:"; val (equal_givens) = (equal_givens);
  24.603 -val xxx = (fn ((_, (_, id)), (_, _, _, _, (feedb, _))) =>
  24.604 -           discern_feedback id feedb)
  24.605 -val           ((_, (_, id)), (_, _, _, _, (feedb, _))) = nth 1 equal_givens;
  24.606 -"~~~~~ fun discern_feedback , args:"; val (id, (Model_Def.Cor_TEST ((descr, ts)))) = (id, feedb);
  24.607 +val return_make_envs_preconds_step = 
  24.608 +  map (fn ((_, (_, id)), (_, _, _, _, (feedb, _))) => discern_feedback id feedb) equal_givens
  24.609 +  |> flat
  24.610  
  24.611 -           discern_typ id (descr, ts);
  24.612 -"~~~~~ fun discern_typ , args:"; val (id, (descr, ts)) = (id, (descr, ts));
  24.613 -(*|------------------- contine me_add_find_Constants -----------------------------------------*)
  24.614 +
  24.615 +val ((_, (_, id)), (_, _, _, _, (feedb, _))) = nth 1 equal_givens
  24.616 +(*\\\\\--------------- step into make_envs_preconds ----------------------------------------//*)
  24.617 +    val subst_eval_list = return_make_envs_preconds;
  24.618 +    val (env_subst, env_eval) = split_list subst_eval_list
  24.619 +
  24.620 +val return_make_environments_step = (env_model, (env_subst, env_eval));
  24.621 +(*+*)if return_make_environments_step = return_make_environments
  24.622 +  then () else error "return_make_environments_step <> return_make_environments";
  24.623 +(*\\\\---------------- step into make_environments -----------------------------------------//*)
  24.624 +(*|||----------------- contine.. Pre_Conds.check ---------------------------------------------*)
  24.625 +      val (env_model, (env_subst, env_eval)) = return_make_environments
  24.626 +      val pres_subst = map (TermC.subst_atomic_all env_subst) where_;
  24.627 +      val pres_subst_other = map (TermC.subst_atomic_all env_model) (map #2 pres_subst);
  24.628 +      val full_subst = if env_eval = [] then pres_subst_other
  24.629 +        else map (TermC.subst_atomic_all env_eval) (map #2 pres_subst_other)
  24.630 +      val evals = map (eval ctxt where_rls) full_subst
  24.631 +    (*in*)
  24.632 +val return_make_environments_step = (foldl and_ (true, map fst evals), pres_subst_other)
  24.633 +(*\\\----------------- step into Pre_Conds.check -------------------------------------------//*)
  24.634 +(*||------------------ contine.. for_problem -------------------------------------------------*)
  24.635 +    val (preok, _) = return_check;
  24.636 +  (*in*)
  24.637 +val false =
  24.638 +    (*if*) dI' = ThyC.id_empty andalso dI = ThyC.id_empty (*else*);
  24.639 +val false =
  24.640 +      (*if*) pI' = Problem.id_empty andalso pI = Problem.id_empty (*else*);
  24.641 +val NONE =
  24.642 +      (*case*) find_first (fn (_, _, _, _, feedb) => I_Model.is_error feedb) pbl (*of*);
  24.643 +
  24.644 +val SOME (fd, ct' as "Maximum A") = (*case*)
  24.645 +           item_to_add ctxt oris (I_Model.OLD_to_TEST pbl) (*of*);
  24.646 +"~~~~~ fun item_to_add , args:"; val (ctxt, o_model, i_model) = (ctxt, oris, (I_Model.OLD_to_TEST pbl));
  24.647 +    val max_vnt = last_elem (*this decides, for which variant initially help is given*)
  24.648 +      (Model_Def.max_variants o_model i_model)
  24.649 +    val o_vnts = filter (fn (_, vnts, _, _, _) => member op= vnts max_vnt) o_model
  24.650 +    val i_to_select = i_model
  24.651 +      |> filter_out (fn (_, vnts, _, _, (I_Model.Cor_TEST _, _)) => member op= vnts max_vnt | _ => false)
  24.652 +      |> select_inc_lists
  24.653 +      |> hd
  24.654 +  (*in*)
  24.655 +
  24.656 +val SOME (_, _, _, m_field, (feedb, _)) = (*case*)
  24.657 +   I_Model.fill_from_o o_vnts i_to_select (*of*);
  24.658 +(*+*)val "Cor_TEST Maximum A , pen2str" = feedb |> I_Model.feedback_TEST_to_string ctxt;
  24.659 +
  24.660 +"~~~~~ fun fill_from_o , args:"; val (o_model, (i, vnts, bool, m_field, (feedb, pos))) =
  24.661 +  (o_vnts, i_to_select);
  24.662 +    val (m_field, all_value as [Free ("A", _)]) =
  24.663 +      case find_first (fn (_, _, _, descr', _) => Pre_Conds.descriptor_exists descr' feedb) o_model of
  24.664 +        SOME (_, _, m_field, _, ts) =>  (m_field, ts)
  24.665 +    val descr = Pre_Conds.get_dscr'' feedb (*i_single has been filtered appropriately*)
  24.666 +  (*in*)
  24.667 +val false =
  24.668 +    (*if*) Pre_Conds.is_list_descr descr (*else*);
  24.669 +val return_fill_from_o_STEP = SOME (i, vnts, bool, m_field,
  24.670 +      (Inc_TEST (descr, all_value), pos))
  24.671  (*\------------------- step into me_add_find_Constants -------------------------------------//*)
  24.672  val (p,_,f,nxt,_,pt) = return_me_add_find_Constants;
  24.673 -(*/########################## before destroying elementwise input of lists ##################\* )
  24.674 -val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Find "AdditionalValues [u]" = nxt;
  24.675 -val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Find "AdditionalValues [v]" = nxt;
  24.676 -( *\########################## before destroying elementwise input of lists ##################/*)
  24.677 -val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Find "AdditionalValues [u, v]" = nxt;
  24.678 +                                      val Add_Find "Maximum A" = nxt
  24.679  
  24.680 +(** )val (p,_,f,nxt,_,pt) =( **)
  24.681 +(**)val return_me_Add_Find_Maximum =(**)
  24.682 +       me nxt p c pt;  val Add_Find "AdditionalValues [u]" = #4 return_me_Add_Find_Maximum;
  24.683 +(*/------------------- step into me_Add_Find_Maximum ---------------------------------------\\*)
  24.684 +"~~~~~ fun me , args:"; val (tac, p, _(*NEW remove*), pt) = (nxt, p, c, pt);
  24.685 +      val ctxt = Ctree.get_ctxt pt p
  24.686 +      val (pt, p) = 
  24.687 +  	    case Step.by_tactic tac (pt, p) of
  24.688 +  		    ("ok", (_, _, ptp)) => ptp;
  24.689 +
  24.690 +      (*case*)
  24.691 +      Step.do_next p ((pt, Pos.e_pos'), []) (*of*);
  24.692 +"~~~~~ fun do_next , args:"; val ((ip as (_, p_)), (ptp as (pt, p), tacis)) =
  24.693 +  (p, ((pt, Pos.e_pos'), []));
  24.694 +val false =
  24.695 +  (*if*) Pos.on_calc_end ip (*else*);
  24.696 +      val (_, probl_id, _) = Calc.references (pt, p);
  24.697 +    (*in*)
  24.698 +val [] =
  24.699 +      (*case*) tacis (*of*);
  24.700 +val false =
  24.701 +        (*if*) probl_id = Problem.id_empty (*else*);
  24.702 +
  24.703 +           switch_specify_solve p_ (pt, ip);
  24.704 +"~~~~~ fun switch_specify_solve , args:"; val (state_pos, (pt, input_pos)) = (p_, (pt, ip));
  24.705 +val true =
  24.706 +      (*if*) Pos.on_specification ([], state_pos) (*then*);
  24.707 +
  24.708 +           specify_do_next (pt, input_pos);
  24.709 +"~~~~~ fun specify_do_next , args:"; val (ptp as (pt, (p, p_))) = (pt, input_pos);
  24.710 +
  24.711 +(**)val (_, (p_', tac as Add_Find "AdditionalValues [u]")) =(**)
  24.712 +   Specify.find_next_step ptp;
  24.713 +"~~~~~ fun find_next_step , args:"; val (pt, pos as (_, p_)) = (ptp);
  24.714 +    val {meth = met, origin = origin as (oris, o_refs as (_, pI', mI'), _), probl = pbl,
  24.715 +      spec = refs, ...} = Calc.specify_data (pt, pos);
  24.716 +    val ctxt = Ctree.get_ctxt pt pos
  24.717 +  (*in*)
  24.718 +val false =
  24.719 +      (*if*) Ctree.just_created (pt, pos) andalso origin <> Ctree.e_origin (*else*);
  24.720 +val true =
  24.721 +        (*if*) p_ = Pos.Pbl (*then*);
  24.722 +
  24.723 +(**)val return_find_next_step_STEP as ("dummy", (Pbl, Add_Find "AdditionalValues [u]")) =(**)
  24.724 +           for_problem ctxt oris (o_refs, refs) (pbl, I_Model.OLD_to_TEST met);
  24.725 +"~~~~~ fun for_problem , args:"; val (ctxt, oris, ((dI', pI', mI'), (dI, pI, mI)), (pbl, met)) =
  24.726 +  (ctxt, oris, (o_refs, refs), (pbl, I_Model.OLD_to_TEST met));
  24.727 +    val cpI = if pI = Problem.id_empty then pI' else pI;
  24.728 +    val cmI = if mI = MethodC.id_empty then mI' else mI;
  24.729 +    val {model = pbt, where_rls, where_, ...} = Problem.from_store ctxt cpI;
  24.730 +    val {model = mpc, ...} = MethodC.from_store ctxt cmI
  24.731 +    val (preok, _) = Pre_Conds.check ctxt where_rls where_ (pbt, I_Model.OLD_to_TEST pbl);
  24.732 +  (*in*)
  24.733 +val false =
  24.734 +    (*if*) dI' = ThyC.id_empty andalso dI = ThyC.id_empty (*else*);
  24.735 +val false =
  24.736 +      (*if*) pI' = Problem.id_empty andalso pI = Problem.id_empty (*else*);
  24.737 +val NONE =
  24.738 +      (*case*) find_first (fn (_, _, _, _, feedb) => I_Model.is_error feedb) pbl (*of*);
  24.739 +
  24.740 +(**)val SOME (fd, ct' as "AdditionalValues [u]") = (*case*)(**)
  24.741 +           item_to_add ctxt oris (I_Model.OLD_to_TEST pbl) (*of*);
  24.742 +"~~~~~ fun item_to_add , args:"; val (ctxt, o_model, i_model) =
  24.743 +  (ctxt, oris, (I_Model.OLD_to_TEST pbl));
  24.744 +    val max_vnt = last_elem (*this decides, for which variant initially help is given*)
  24.745 +      (Model_Def.max_variants o_model i_model)
  24.746 +    val o_vnts = filter (fn (_, vnts, _, _, _) => member op= vnts max_vnt) o_model
  24.747 +    val i_to_select = i_model
  24.748 +      |> filter_out (fn (_, vnts, _, _, (I_Model.Cor_TEST _, _)) => member op= vnts max_vnt | _ => false)
  24.749 +      |> select_inc_lists
  24.750 +(*ERROR*)val "[\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))]"
  24.751 + = i_to_select |> I_Model.to_string_TEST ctxt(*ERROR*)
  24.752 +  (*in*)
  24.753 +val false =
  24.754 +    (*if*) i_to_select = []
  24.755 +
  24.756 +val SOME (_, _, _, m_field, (feedb, _)) = (*case*)
  24.757 +   I_Model.fill_from_o o_vnts (hd i_to_select) (*of*);
  24.758 +"~~~~~ fun fill_from_o , args:";
  24.759 +(*==================== see test/../i-model.sml --- fun item_to_add ===========================*)
  24.760 +(*\------------------- step into me_Add_Find_Maximum ---------------------------------------//*)
  24.761 +val (p,_,f,nxt,_,pt) = return_me_Add_Find_Maximum; 
  24.762 +                                      val Add_Find "AdditionalValues [u]" = nxt
  24.763 +val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Find "AdditionalValues [u, v]" = nxt;(*ERROR after repairing item_to_add, investigate in testcode above*)
  24.764  val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Relation "Extremum (A = 2 * u * v - u \<up> 2)" = nxt;
  24.765  val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Relation "SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2]" = nxt;
  24.766 -val return_me_Add_Relation_SideConditions
  24.767 +
  24.768 +val return_me_Add_Relation_SideConditions as (_, _, _, Specify_Theory "Diff_App", _, _)
  24.769                       = me nxt p c pt;
  24.770 -(*+*)val (_, _, _, Specify_Theory "Diff_App", _, _) = return_me_Add_Relation_SideConditions; (*###############*)
  24.771  (*/------------------- step into me Add_Relation_SideConditions ----------------------------\\*)
  24.772  "~~~~~ fun me , args:"; val (tac, p, _, pt) = (nxt, p, c, pt);
  24.773        val ctxt = Ctree.get_ctxt pt p;
  24.774 @@ -610,12 +408,10 @@
  24.775        Step.switch_specify_solve p_ (pt, ip);
  24.776  "~~~~~ fun switch_specify_solve , args:"; val (state_pos, (pt, input_pos)) = (p_, (pt, ip));
  24.777        (*if*) Pos.on_specification ([], state_pos) (*then*);
  24.778 +
  24.779        Step.specify_do_next (pt, input_pos);
  24.780  "~~~~~ fun specify_do_next , args:"; val ((ptp as (pt, (p, p_)))) = (pt, input_pos);
  24.781 -(*isa------ERROR: Refine_Problem INSTEAD 
  24.782 -            isa2: Specify_Theory "Diff_App"*)
  24.783      val (_, (p_', tac as Specify_Theory "Diff_App")) =
  24.784 -(*ERROR------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*)
  24.785     Specify.find_next_step ptp;
  24.786  "~~~~~ fun find_next_step , args:"; val (pt, pos as (_, p_)) = (ptp);
  24.787      val {meth = met, origin = origin as (oris, o_refs as (_, pI', mI'), _), probl = pbl,
  24.788 @@ -624,9 +420,10 @@
  24.789        (*if*) Ctree.just_created (pt, pos) andalso origin <> Ctree.e_origin (*else*);
  24.790          (*if*) p_ = Pos.Pbl (*then*);
  24.791  
  24.792 -val ("dummy", (Pbl, tac as Specify_Theory "Diff_App")) =
  24.793 -(*ERROR------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*)
  24.794 -          for_problem ctxt oris (o_refs, refs) (pbl, met);
  24.795 +(** )val ("dummy", (Pbl, tac as Specify_Theory "Diff_App")) =( **)
  24.796 +(**)val return_for_problem =(**)
  24.797 +  for_problem ctxt oris (o_refs, refs) (pbl, I_Model.OLD_to_TEST met);
  24.798 +(*///// /------------- step into for_problem -----------------------------------------------\\*)
  24.799  "~~~~~ fun for_problem , args:"; val (ctxt, oris, ((dI', pI', mI'), (dI, pI, mI)), (pbl, met)) =
  24.800    (ctxt, oris, (o_refs, refs), (pbl, met));
  24.801      val cpI = if pI = Problem.id_empty then pI' else pI;
  24.802 @@ -635,18 +432,19 @@
  24.803      val {model = mpc, ...} = MethodC.from_store ctxt cmI
  24.804  
  24.805  (*+*)val [Const ("Orderings.ord_class.less", _) $ Const ("Groups.zero_class.zero", _) $
  24.806 -  Free ("fixes", _)] = where_
  24.807 +  Free ("fixes", _)] = where_;
  24.808  
  24.809 -    val (preok, _) =
  24.810 +(** )val (preok, _) =( **)
  24.811 +(**)return_check =(**)
  24.812   Pre_Conds.check ctxt where_rls where_ (pbt, I_Model.OLD_to_TEST pbl);
  24.813 -(*///----------------- step into check -------------------------------------------------\\*)
  24.814 +(*///// //------------ step into check -------------------------------------------------\\*)
  24.815  "~~~~~ fun check , args:"; val (ctxt, where_rls, pres, (model_patt, i_model)) =
  24.816    (ctxt, where_rls, where_, (pbt, I_Model.OLD_to_TEST pbl));
  24.817 -(*+*)val "[0 < fixes]" = pres |> UnparseC.terms @{context}
  24.818 +(*+*)val "[0 < fixes]" = pres |> UnparseC.terms ctxt
  24.819  (*+*)val "[\"(#Given, (Constants, fixes))\", \"(#Find, (Maximum, maxx))\", \"(#Find, (AdditionalValues, vals))\", \"(#Relate, (Extremum, extr))\", \"(#Relate, (SideConditions, sideconds))\"]"
  24.820 -(*+*)  = model_patt |> Model_Pattern.to_string @{context}
  24.821 +(*+*)  = model_patt |> Model_Pattern.to_string ctxt
  24.822  (*+*)val "[\n(1, [1, 2, 3], true ,#Given, (Cor_TEST Constants [r = 7] , pen2str, Position.T)), \n(2, [1, 2, 3], true ,#Find, (Cor_TEST Maximum A , pen2str, Position.T)), \n(3, [1, 2, 3], true ,#Find, (Cor_TEST AdditionalValues [u, v] , pen2str, Position.T)), \n(4, [1, 2, 3], true ,#Relate, (Cor_TEST Extremum (A = 2 * u * v - u \<up> 2) , pen2str, Position.T)), \n(5, [1, 2], true ,#Relate, (Cor_TEST SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str, Position.T))]"
  24.823 - = i_model |> I_Model.to_string_TEST @{context}
  24.824 + = i_model |> I_Model.to_string_TEST ctxt
  24.825  
  24.826  val return_make_environments as (_, (env_subst, env_eval)) =
  24.827             Pre_Conds.make_environments model_patt i_model
  24.828 @@ -661,8 +459,6 @@
  24.829  val (_, (env_subst, env_eval)) = return_make_environments;
  24.830  (*|||----------------- contine check -----------------------------------------------------*)
  24.831        val pres_subst = map (TermC.subst_atomic_all env_subst) pres;
  24.832 -
  24.833 -(*|||----------------- contine check -----------------------------------------------------*)
  24.834  (*+*)val [(true, Const ("Orderings.ord_class.less", _) $
  24.835    Const ("Groups.zero_class.zero", _) $ Free ("r", _))] = pres_subst
  24.836  
  24.837 @@ -672,11 +468,43 @@
  24.838         (Const ("Num.numeral_class.numeral", _) $ _))] = full_subst
  24.839  
  24.840        val evals = map (eval ctxt where_rls) full_subst
  24.841 -val return_check_OLD = (foldl and_ (true, map fst evals), pres_subst)
  24.842 -(*\\\----------------- step into check -------------------------------------------------\\*)
  24.843 +val return_check_STEP = (foldl and_ (true, map fst evals), pres_subst)
  24.844 +(*\\\\\ \\------------ step into check -------------------------------------------------\\*)
  24.845 +    val (preok as true, _) = return_check
  24.846  
  24.847 -    val (preok as true, _) = return_check_OLD
  24.848 -(*+---------------^^^^*)
  24.849 +(*||||| |------------- contine.. for_problem -------------------------------------------------*)
  24.850 +val false =
  24.851 +    (*if*) dI' = ThyC.id_empty andalso dI = ThyC.id_empty (*else*);
  24.852 +val false =
  24.853 +      (*if*) pI' = Problem.id_empty andalso pI = Problem.id_empty (*else*);
  24.854 +val NONE =
  24.855 +      (*case*) find_first (fn (_, _, _, _, feedb) => I_Model.is_error feedb) pbl (*of*);
  24.856 +
  24.857 +  (*case*) item_to_add ctxt oris (I_Model.OLD_to_TEST pbl) (*of*);
  24.858 +"~~~~~ fun item_to_add , args:"; val (ctxt, o_model, i_model) = (ctxt, oris, (I_Model.OLD_to_TEST pbl));
  24.859 +
  24.860 +(*+*)val "[\n(1, [\"1\", \"2\", \"3\"], #Given, Constants, [\"[r = 7]\"]), \n(2, [\"1\", \"2\", \"3\"], #Find, Maximum, [\"A\"]), \n(3, [\"1\", \"2\", \"3\"], #Find, AdditionalValues, [\"[u]\", \"[v]\"]), \n(4, [\"1\", \"2\", \"3\"], #Relate, Extremum, [\"A = 2 * u * v - u \<up> 2\"]), \n(5, [\"1\", \"2\"], #Relate, SideConditions, [\"[(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2]\"]), \n(6, [\"3\"], #Relate, SideConditions, [\"[u / 2 = r * sin \<alpha>]\", \"[2 / v = r * cos \<alpha>]\"]), \n(7, [\"1\"], #undef, FunctionVariable, [\"a\"]), \n(8, [\"2\"], #undef, FunctionVariable, [\"b\"]), \n(9, [\"3\"], #undef, FunctionVariable, [\"\<alpha>\"]), \n(10, [\"1\", \"2\"], #undef, Input_Descript.Domain, [\"{0<..<r}\"]), \n(11, [\"3\"], #undef, Input_Descript.Domain, [\"{0<..<\<pi> / 2}\"]), \n(12, [\"1\", \"2\", \"3\"], #undef, ErrorBound, [\"\<epsilon> = 0\"])]"
  24.861 + = o_model |> O_Model.to_string ctxt
  24.862 +(*+*)val "[\n(1, [1, 2, 3], true ,#Given, (Cor_TEST Constants [r = 7] , pen2str, Position.T)), \n(2, [1, 2, 3], true ,#Find, (Cor_TEST Maximum A , pen2str, Position.T)), \n(3, [1, 2, 3], true ,#Find, (Cor_TEST AdditionalValues [u, v] , pen2str, Position.T)), \n(4, [1, 2, 3], true ,#Relate, (Cor_TEST Extremum (A = 2 * u * v - u \<up> 2) , pen2str, Position.T)), \n(5, [1, 2], true ,#Relate, (Cor_TEST SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str, Position.T))]"
  24.863 + = i_model |> I_Model.to_string_TEST ctxt
  24.864 +
  24.865 +    val max_vnt as 1= last_elem (*this decides, for which variant initially help is given*)
  24.866 +      (Model_Def.max_variants o_model i_model)
  24.867 +    val o_vnts = filter (fn (_, vnts, _, _, _) => member op= vnts max_vnt) o_model
  24.868 +(*+*)val "[\n(1, [\"1\", \"2\", \"3\"], #Given, Constants, [\"[r = 7]\"]), \n(2, [\"1\", \"2\", \"3\"], #Find, Maximum, [\"A\"]), \n(3, [\"1\", \"2\", \"3\"], #Find, AdditionalValues, [\"[u]\", \"[v]\"]), \n(4, [\"1\", \"2\", \"3\"], #Relate, Extremum, [\"A = 2 * u * v - u \<up> 2\"]), \n(5, [\"1\", \"2\"], #Relate, SideConditions, [\"[(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2]\"]), \n(7, [\"1\"], #undef, FunctionVariable, [\"a\"]), \n(10, [\"1\", \"2\"], #undef, Input_Descript.Domain, [\"{0<..<r}\"]), \n(12, [\"1\", \"2\", \"3\"], #undef, ErrorBound, [\"\<epsilon> = 0\"])]"
  24.869 + = o_vnts |> O_Model.to_string ctxt
  24.870 +
  24.871 +    val i_to_select = i_model
  24.872 +      |> filter_out (fn (_, vnts, _, _, (I_Model.Cor_TEST _, _)) => member op= vnts max_vnt | _ => false)
  24.873 +      |> select_inc_lists
  24.874 +val true =
  24.875 +    (*if*) i_to_select = [] (*then*);
  24.876 +
  24.877 +val return_for_problem_STEP = NONE
  24.878 +(*\\\\\ \------------- step into for_problem -----------------------------------------------//*)
  24.879 +val calling_code = return_for_problem;
  24.880 +(*-------------------- stopped after ERROR found ---------------------------------------------*)
  24.881 +
  24.882  (*\\------------------ step into do_next ---------------------------------------------------\\*)
  24.883  (*\------------------- step into me_Add_Relation_SideConditions ----------------------------//*)
  24.884  val (p, _, f, nxt, _, pt) = return_me_Add_Relation_SideConditions
  24.885 @@ -684,8 +512,8 @@
  24.886  
  24.887  val return_me_Specify_Theory
  24.888                       = me nxt p c pt; val Specify_Problem ["univariate_calculus", "Optimisation"] = #4 return_me_Specify_Theory;
  24.889 -(*/------------------- step into me Specify_Theory -----------------------------------------\\*)
  24.890 -"~~~~~ fun me , args:"; val (tac, p, _, pt) = (nxt, p, c, pt);
  24.891 +(*/------------------- step into me_Specify_Theory -----------------------------------------\\*)
  24.892 +"~~~~~ fun me , args:"; val (tac as Specify_Theory "Diff_App", p, _, pt) = (nxt, p, c, pt);
  24.893        val ctxt = Ctree.get_ctxt pt p;
  24.894  (*      val (pt, p) = *)
  24.895    	    (*case*) Step.by_tactic tac (pt, p) (*of*);
  24.896 @@ -734,12 +562,12 @@
  24.897  	    val thy = ThyC.get_theory ctxt (if dI' = ThyC.id_empty then dI else dI');
  24.898        val {model, where_, where_rls,...} = Problem.from_store (Ctree.get_ctxt pt pos) pI
  24.899  (*\\------------------ step into do_next ---------------------------------------------------//*)
  24.900 -(*\------------------- step into me Specify_Theory -----------------------------------------//*)
  24.901 +(*\------------------- step into me_Specify_Theory -----------------------------------------//*)
  24.902  val (p,_,f,nxt,_,pt) = return_me_Specify_Theory;
  24.903  
  24.904  val return_me_Specify_Problem (* keep for continuing me *)
  24.905                       = me nxt p c pt; val Specify_Method ["Optimisation", "by_univariate_calculus"] = #4 return_me_Specify_Problem;
  24.906 -(*/------------------- step into me Specify_Problem ----------------------------------------\\*)
  24.907 +(*/------------------- step into me_Specify_Problem ----------------------------------------\\*)
  24.908  "~~~~~ fun me , args:"; val (tac, p, _, pt) = (nxt, p, c, pt);
  24.909        val ctxt = Ctree.get_ctxt pt p
  24.910  
  24.911 @@ -793,18 +621,33 @@
  24.912  Specify_Step.complete_for id (pt, pos);
  24.913  (*//------------------ step into complete_for ----------------------------------------------\\*)
  24.914  "~~~~~ fun complete_for , args:"; val (mID, (ctree, pos)) = (id, (pt, pos));
  24.915 -    val {origin = (o_model, o_refs, _), spec = refs, probl = i_prob, ctxt,
  24.916 +
  24.917 +(*+*)val ["Optimisation", "by_univariate_calculus"] = mID
  24.918 +(*OLD*  )
  24.919 +    val {origin = (o_model, _, _), probl = i_prob, ctxt,
  24.920 +       ...} = Calc.specify_data (ctree, pos);
  24.921 +    val {model = m_patt, where_, where_rls, ...} = MethodC.from_store ctxt mID
  24.922 +    val {origin = (root_model, _, _), ...} = Calc.specify_data (ctree, ([], Pos.Und))
  24.923 +    val (o_model', ctxt') = O_Model.complete_for m_patt root_model (o_model, ctxt)
  24.924 +( *---*)
  24.925 +    val {origin = (o_model, o_refs, _), spec = refs, probl = i_prob, meth = met_imod, ctxt,
  24.926         ...} = Calc.specify_data (ctree, pos);
  24.927      val ctxt = Ctree.get_ctxt ctree pos
  24.928      val (dI, _, _) = References.select_input o_refs refs;
  24.929      val {model = m_patt, where_, where_rls, ...} = MethodC.from_store ctxt mID
  24.930      val {origin = (root_model, _, _), ...} = Calc.specify_data (ctree, ([], Pos.Und))
  24.931      val (o_model', ctxt') = O_Model.complete_for m_patt root_model (o_model, ctxt)
  24.932 +(*NEW*)
  24.933  
  24.934  (**)val return_match_itms_oris = (**)
  24.935  (** )val (_, (i_model, _)) = ( **)
  24.936 -   M_Match.match_itms_oris ctxt o_model' (I_Model.OLD_to_TEST i_prob, I_Model.OLD_to_TEST i_prob)
  24.937 +(*OLD* )
  24.938 +   M_Match.match_itms_oris ctxt i_prob (m_patt, where_, where_rls) o_model';
  24.939 +( *---*)
  24.940 +     M_Match.match_itms_oris ctxt o_model' (I_Model.OLD_to_TEST i_prob, I_Model.OLD_to_TEST i_prob)
  24.941                (m_patt, where_, where_rls);
  24.942 +(*NEW*)
  24.943 +(*//################## @ {context} within fun match_itms_oris -----------------------------\\*)
  24.944  (*///----------------- step into match_itms_oris -------------------------------------------\\*)
  24.945  "~~~~~ fun match_itms_oris, args:"; val (ctxt, o_model, (pbl_imod, met_imod), (m_patt, where_, where_rls)) =
  24.946    (ctxt, o_model', (I_Model.OLD_to_TEST i_prob, I_Model.OLD_to_TEST i_prob), (m_patt, where_, where_rls));
  24.947 @@ -816,23 +659,57 @@
  24.948  "~~~~~ fun fill_method , args:"; val (o_model, (pbl_imod, met_imod), met_patt) =
  24.949    (o_model, (pbl_imod, met_imod), m_patt);
  24.950  
  24.951 -    val pbl_max_vnts as [2, 1] = Model_Def.max_variants o_model pbl_imod
  24.952 +(*+*)val "[\n(1, [1, 2, 3], true ,#Given, (Cor_TEST Constants [r = 7] , pen2str, Position.T)), \n(2, [1, 2, 3], true ,#Find, (Cor_TEST Maximum A , pen2str, Position.T)), \n(3, [1, 2, 3], true ,#Find, (Cor_TEST AdditionalValues [u, v] , pen2str, Position.T)), \n(4, [1, 2, 3], true ,#Relate, (Cor_TEST Extremum (A = 2 * u * v - u \<up> 2) , pen2str, Position.T)), \n(5, [1, 2], true ,#Relate, (Cor_TEST SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str, Position.T))]"
  24.953 + = pbl_imod |> I_Model.to_string_TEST ctxt
  24.954 +(*+*)val "[\n(1, [1, 2, 3], true ,#Given, (Cor_TEST Constants [r = 7] , pen2str, Position.T)), \n(2, [1, 2, 3], true ,#Find, (Cor_TEST Maximum A , pen2str, Position.T)), \n(3, [1, 2, 3], true ,#Find, (Cor_TEST AdditionalValues [u, v] , pen2str, Position.T)), \n(4, [1, 2, 3], true ,#Relate, (Cor_TEST Extremum (A = 2 * u * v - u \<up> 2) , pen2str, Position.T)), \n(5, [1, 2], true ,#Relate, (Cor_TEST SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str, Position.T))]"
  24.955 + = met_imod |> I_Model.to_string_TEST ctxt
  24.956 +
  24.957 +(**)val return_max_variants =(**)
  24.958 +(** )val pbl_max_vnts as [2, 1] =( **)
  24.959 + Model_Def.max_variants o_model pbl_imod;
  24.960 +(*//------------------ step into max_variants ----------------------------------------------\\*)
  24.961 +"~~~~~ fun max_variants , args:"; val (o_model, i_model) = (o_model, pbl_imod);
  24.962 +      val all_variants as [1, 2, 3] =
  24.963 +          map (fn (_, variants, _, _, _) => variants) i_model
  24.964 +          |> flat
  24.965 +          |> distinct op =
  24.966 +      val variants_separated = map (filter_variants' i_model) all_variants
  24.967 +(*+*)val ["[\n(1, [1, 2, 3], true ,#Given, (Cor_TEST Constants [r = 7] , pen2str, Position.T)), \n(2, [1, 2, 3], true ,#Find, (Cor_TEST Maximum A , pen2str, Position.T)), \n(3, [1, 2, 3], true ,#Find, (Cor_TEST AdditionalValues [u, v] , pen2str, Position.T)), \n(4, [1, 2, 3], true ,#Relate, (Cor_TEST Extremum (A = 2 * u * v - u \<up> 2) , pen2str, Position.T)), \n(5, [1, 2], true ,#Relate, (Cor_TEST SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str, Position.T))]",
  24.968 +          "[\n(1, [1, 2, 3], true ,#Given, (Cor_TEST Constants [r = 7] , pen2str, Position.T)), \n(2, [1, 2, 3], true ,#Find, (Cor_TEST Maximum A , pen2str, Position.T)), \n(3, [1, 2, 3], true ,#Find, (Cor_TEST AdditionalValues [u, v] , pen2str, Position.T)), \n(4, [1, 2, 3], true ,#Relate, (Cor_TEST Extremum (A = 2 * u * v - u \<up> 2) , pen2str, Position.T)), \n(5, [1, 2], true ,#Relate, (Cor_TEST SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str, Position.T))]",
  24.969 +          "[\n(1, [1, 2, 3], true ,#Given, (Cor_TEST Constants [r = 7] , pen2str, Position.T)), \n(2, [1, 2, 3], true ,#Find, (Cor_TEST Maximum A , pen2str, Position.T)), \n(3, [1, 2, 3], true ,#Find, (Cor_TEST AdditionalValues [u, v] , pen2str, Position.T)), \n(4, [1, 2, 3], true ,#Relate, (Cor_TEST Extremum (A = 2 * u * v - u \<up> 2) , pen2str, Position.T))]"]
  24.970 + = variants_separated |> map (I_Model.to_string_TEST ctxt)
  24.971 +
  24.972 +      val sums_corr as [5, 5, 4] = map (cnt_corrects) variants_separated
  24.973 +      (*----------------#--#--#*)
  24.974 +      (*---------------------^-------^-------^*)
  24.975 +      val sum_variant_s as [(5, 1), (5, 2), (4, 3)] = arrange_args sums_corr (1, all_variants)
  24.976 +      val max_first as [(5, 2), (5, 1), (4, 3)] = rev (sort (fn ((i, _), (j, _)) => int_ord (i, j)) sum_variant_s)
  24.977 +      (*----------------##====--##====--//////---------^^^^*)
  24.978 +      (*------------^--^-#-------#*)
  24.979 +      val maxes as [2, 1] = filter (fn (cnt, _) => curry op = (fst (hd max_first)) cnt) max_first
  24.980 +        |> map snd
  24.981 +val return_max_variants = maxes
  24.982 +(*\\------------------ step into max_variants ----------------------------------------------//*)
  24.983 +val pbl_max_vnts as [2, 1] = return_max_variants;
  24.984  
  24.985      (*probably pbl/met_imod = [], so take met_patt; if empty return Sup*)
  24.986      val i_from_met = map (fn (_, (descr, _)) => (*order from met_patt*)
  24.987        Pre_Conds.get_descr_vnt descr pbl_max_vnts met_imod) met_patt (*\<longrightarrow> right order for args*)
  24.988  (*+MET: Sup..*)val "[\n(1, [1, 2, 3], true ,#Given, (Cor_TEST Constants [r = 7] , pen2str, Position.T)), \n(2, [1, 2, 3], true ,#Find, (Cor_TEST Maximum A , pen2str, Position.T)), \n(4, [1, 2, 3], true ,#Relate, (Cor_TEST Extremum (A = 2 * u * v - u \<up> 2) , pen2str, Position.T)), \n(5, [1, 2], true ,#Relate, (Cor_TEST SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str, Position.T)), \n(0, [], false ,i_model_empty, (Sup_TEST FunctionVariable, Position.T)), \n(0, [], false ,i_model_empty, (Sup_TEST Input_Descript.Domain, Position.T)), \n(0, [], false ,i_model_empty, (Sup_TEST ErrorBound, Position.T)), \n(3, [1, 2, 3], true ,#Find, (Cor_TEST AdditionalValues [u, v] , pen2str, Position.T))]"
  24.989 -  = i_from_met |> I_Model.to_string_TEST @{context}
  24.990 +  = i_from_met |> I_Model.to_string_TEST ctxt
  24.991  
  24.992      val met_max_vnts as [2, 1] = Model_Def.max_variants o_model i_from_met;
  24.993      val max_vnt as 2 = hd (inter op= pbl_max_vnts met_max_vnts);
  24.994      (*add items from pbl_imod (without overwriting existing items in met_imod)*)
  24.995  
  24.996 -val return_add_other =  map (
  24.997 +val return_add_other = map (
  24.998             add_other max_vnt pbl_imod) i_from_met;
  24.999 +(*+*)val "[\n(1, [1, 2, 3], true ,#Given, (Cor_TEST Constants [r = 7] , pen2str, Position.T)), \n(2, [1, 2, 3], true ,#Find, (Cor_TEST Maximum A , pen2str, Position.T)), \n(4, [1, 2, 3], true ,#Relate, (Cor_TEST Extremum (A = 2 * u * v - u \<up> 2) , pen2str, Position.T)), \n(5, [1, 2], true ,#Relate, (Cor_TEST SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str, Position.T)), \n(0, [2], false ,i_model_empty, (Sup_TEST FunctionVariable, Position.T)), \n(0, [2], false ,i_model_empty, (Sup_TEST Input_Descript.Domain, Position.T)), \n(0, [2], false ,i_model_empty, (Sup_TEST ErrorBound, Position.T)), \n(3, [1, 2, 3], true ,#Find, (Cor_TEST AdditionalValues [u, v] , pen2str, Position.T))]"
 24.1000 +  = return_add_other |> I_Model.to_string_TEST ctxt;
 24.1001  (*/////-------------- step into add_other -------------------------------------------------\\*)
 24.1002  "~~~~~ fun add_other_5 , args:"; val (max_vnt, i1_model, (i2, _, bool2, m_field2, (Sup_TEST (descr2, ts2), pos2))) =
 24.1003    (max_vnt, pbl_imod, nth 5 i_from_met);
 24.1004 +
 24.1005  (*+*)val Const ("Input_Descript.FunctionVariable", _) = descr2;
 24.1006  
 24.1007  val (_, vnts1, _, _, (feedb1, _)) = (i2, [], bool2, m_field2, (Sup_TEST (descr2, ts2), pos2))
 24.1008 @@ -855,19 +732,20 @@
 24.1009  val return_fill_method_step = filter (fn (_, vnts', _, _, _) => member op = vnts' max_vnt) i_from_met
 24.1010  
 24.1011  (*+MET: dropped ALL DUE TO is_empty_single_TEST*)val "[\n(1, [1, 2, 3], true ,#Given, (Cor_TEST Constants [r = 7] , pen2str, Position.T)), \n(2, [1, 2, 3], true ,#Find, (Cor_TEST Maximum A , pen2str, Position.T)), \n(4, [1, 2, 3], true ,#Relate, (Cor_TEST Extremum (A = 2 * u * v - u \<up> 2) , pen2str, Position.T)), \n(5, [1, 2], true ,#Relate, (Cor_TEST SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str, Position.T)), \n(3, [1, 2, 3], true ,#Find, (Cor_TEST AdditionalValues [u, v] , pen2str, Position.T))]" =
 24.1012 -  return_fill_method_step |> I_Model.to_string_TEST @{context}
 24.1013 +  return_fill_method_step |> I_Model.to_string_TEST ctxt
 24.1014  (*+*)val                                             "[\n(1, [1, 2, 3], true ,#Given, (Cor_TEST Constants [r = 7] , pen2str, Position.T)), \n(2, [1, 2, 3], true ,#Find, (Cor_TEST Maximum A , pen2str, Position.T)), \n(4, [1, 2, 3], true ,#Relate, (Cor_TEST Extremum (A = 2 * u * v - u \<up> 2) , pen2str, Position.T)), \n(5, [1, 2], true ,#Relate, (Cor_TEST SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str, Position.T)), \n(0, [2], false ,i_model_empty, (Sup_TEST FunctionVariable, Position.T)), \n(0, [2], false ,i_model_empty, (Sup_TEST Input_Descript.Domain, Position.T)), \n(0, [2], false ,i_model_empty, (Sup_TEST ErrorBound, Position.T)), \n(3, [1, 2, 3], true ,#Find, (Cor_TEST AdditionalValues [u, v] , pen2str, Position.T))]"
 24.1015 - = return_fill_method |> I_Model.to_string_TEST @{context};
 24.1016 + = return_fill_method |> I_Model.to_string_TEST ctxt;
 24.1017  return_fill_method_step = return_fill_method; (*latter is correct, did not investigate further*)
 24.1018  (*\\\----------------- step into match_itms_oris -------------------------------------------//*)
 24.1019 +(*\\################# @ {context} within fun match_itms_oris ------------------------------//*)
 24.1020  val (_, (i_model, _)) = return_match_itms_oris;
 24.1021  
 24.1022  (*||------------------ continue. complete_for ------------------------------------------------*)
 24.1023        val (o_model, ctxt, i_model) = return_complete_for
 24.1024 -(*+*)val "[\n(1, [1, 2, 3], true ,#Given, (Cor_TEST Constants [r = 7] , pen2str, Position.T)), \n(2, [1, 2, 3], true ,#Find, (Cor_TEST Maximum A , pen2str, Position.T)), \n(4, [1, 2, 3], true ,#Relate, (Cor_TEST Extremum (A = 2 * u * v - u \<up> 2) , pen2str, Position.T)), \n(5, [1, 2], true ,#Relate, (Cor_TEST SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str, Position.T)), \n(0, [2], false ,i_model_empty, (Sup_TEST FunctionVariable, Position.T)), \n(0, [2], false ,i_model_empty, (Sup_TEST Input_Descript.Domain, Position.T)), \n(0, [2], false ,i_model_empty, (Sup_TEST ErrorBound, Position.T)), \n(3, [1, 2, 3], true ,#Find, (Cor_TEST AdditionalValues [u, v] , pen2str, Position.T))]"
 24.1025 - = i_model |> I_Model.to_string_TEST @{context}
 24.1026 +(*+isa*)val "[\n(1, [1, 2, 3], true ,#Given, (Cor_TEST Constants [r = 7] , pen2str, Position.T)), \n(2, [1, 2, 3], true ,#Find, (Cor_TEST Maximum A , pen2str, Position.T)), \n(4, [1, 2, 3], true ,#Relate, (Cor_TEST Extremum (A = 2 * u * v - u \<up> 2) , pen2str, Position.T)), \n(5, [1, 2], true ,#Relate, (Cor_TEST SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str, Position.T)), \n(0, [2], false ,i_model_empty, (Sup_TEST FunctionVariable, Position.T)), \n(0, [2], false ,i_model_empty, (Sup_TEST Input_Descript.Domain, Position.T)), \n(0, [2], false ,i_model_empty, (Sup_TEST ErrorBound, Position.T)), \n(3, [1, 2, 3], true ,#Find, (Cor_TEST AdditionalValues [u, v] , pen2str, Position.T))]"
 24.1027 + = i_model |> I_Model.to_string_TEST ctxt(*+isa*)
 24.1028  (*+isa2:MET.Mis* ) val "[\n(1 ,[1, 2, 3] ,true ,#Given ,Cor Constants [r = 7] , pen2str), \n(2 ,[1, 2, 3] ,true ,#Find ,Cor Maximum A , pen2str), \n(3 ,[1, 2, 3] ,true ,#Find ,Cor AdditionalValues [u, v] , pen2str), \n(4 ,[1, 2, 3] ,true ,#Relate ,Cor Extremum (A = 2 * u * v - u \<up> 2) , pen2str), \n(5 ,[1, 2] ,true ,#Relate ,Cor SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str), \n(7 ,[1] ,false ,#Given ,Mis FunctionVariable funvar), \n(10 ,[1, 2] ,false ,#Given ,Mis Input_Descript.Domain doma), \n(12 ,[1, 2, 3] ,false ,#Given ,Mis ErrorBound err)]" =
 24.1029 -  i_model |> I_Model.to_string @{context} ( *+isa2*)
 24.1030 +  i_model |> I_Model.to_string ctxt ( *+isa2*)
 24.1031  (*\\------------------ step into complete_for ----------------------------------------------//*)
 24.1032        val (o_model, ctxt, i_model) = return_complete_for
 24.1033  
 24.1034 @@ -877,17 +755,17 @@
 24.1035  val (o_model'_step, i_model_step) = (#1 return_complete_for_step, #3 return_complete_for_step)
 24.1036  val (o_model', i_model) = (#1 return_complete_for, #3 return_complete_for)
 24.1037  ;
 24.1038 -if (o_model'_step, i_model_step) = (o_model', i_model)
 24.1039 -then () else error "return_complete_for_step <> return_complete_for";
 24.1040 +(*+*)if (o_model'_step, i_model_step) = (o_model', i_model)
 24.1041 +(*+*)then () else error "return_complete_for_step <> return_complete_for";
 24.1042  (*\------------------- step into me Specify_Problem ----------------------------------------//*)
 24.1043  val (p,_,f,nxt,_,pt) = return_me_Specify_Problem
 24.1044  
 24.1045  val return_me_Specify_Method
 24.1046 -                     = me nxt p c pt; val Add_Given "FunctionVariable b" = #4 return_me_Specify_Method;
 24.1047 +                     = me nxt p c pt; val Add_Given "FunctionVariable a" = #4 return_me_Specify_Method;
 24.1048  (*/------------------- step into me_Specify_Method -----------------------------------------\\*)
 24.1049  "~~~~~ fun me , args:"; val (tac, p, _, pt) = (nxt, p, c, pt);
 24.1050  
 24.1051 -(*+isa==isa2*)val "[]" =(*+*) get_obj g_met pt (fst p) |> I_Model.to_string @{context}
 24.1052 +(*+*)val "[]" =(*+*) get_obj g_met pt (fst p) |> I_Model.to_string ctxt
 24.1053  
 24.1054        val ctxt = Ctree.get_ctxt pt p
 24.1055        val (pt, p) = 
 24.1056 @@ -907,13 +785,9 @@
 24.1057  (* M_Match.match_itms_oris*)
 24.1058  "~~~~~ fun match_itms_oris , args:"; val () = ();
 24.1059  
 24.1060 -(*+*)val                 "[\n(1 ,[1, 2, 3] ,true ,#Given ,Cor Constants [r = 7] , pen2str), \n(2 ,[1, 2, 3] ,true ,#Find ,Cor Maximum A , pen2str), \n(4 ,[1, 2, 3] ,true ,#Relate ,Cor Extremum (A = 2 * u * v - u \<up> 2) , pen2str), \n(5 ,[1, 2] ,true ,#Relate ,Cor SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str), \n(0 ,[2] ,false ,i_model_empty ,Sup FunctionVariable), \n(0 ,[2] ,false ,i_model_empty ,Sup Input_Descript.Domain), \n(0 ,[2] ,false ,i_model_empty ,Sup ErrorBound), \n(3 ,[1, 2, 3] ,true ,#Find ,Cor AdditionalValues [u, v] , pen2str)]"
 24.1061 - = get_obj g_met pt (fst p) |> I_Model.to_string @{context};
 24.1062 -(*
 24.1063 -(*+isa: METHOD.drop* )val"[\n(1 ,[1, 2, 3] ,true ,#Given ,Cor Constants [r = 7] , pen2str), \n(2 ,[1, 2, 3] ,true ,#Find ,Cor Maximum A , pen2str), \n(3 ,[1, 2, 3] ,true ,#Find ,Cor AdditionalValues [u, v] , pen2str), \n(4 ,[1, 2, 3] ,true ,#Relate ,Cor Extremum (A = 2 * u * v - u \<up> 2) , pen2str), \n(5 ,[1, 2] ,true ,#Relate ,Cor SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str)]" =( *+isaALLcorrect*)
 24.1064 -(*+isa2:METHOD.Mis*)val  "[\n(1 ,[1, 2, 3] ,true ,#Given ,Cor Constants [r = 7] , pen2str), \n(2 ,[1, 2, 3] ,true ,#Find ,Cor Maximum A , pen2str), \n(3 ,[1, 2, 3] ,true ,#Find ,Cor AdditionalValues [u, v] , pen2str), \n(4 ,[1, 2, 3] ,true ,#Relate ,Cor Extremum (A = 2 * u * v - u \<up> 2) , pen2str), \n(5 ,[1, 2] ,true ,#Relate ,Cor SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str), \n(7 ,[1] ,false ,#Given ,Mis FunctionVariable funvar), \n(10 ,[1, 2] ,false ,#Given ,Mis Input_Descript.Domain doma), \n(12 ,[1, 2, 3] ,false ,#Given ,Mis ErrorBound err)]" =(*isa2*)
 24.1065 -  get_obj g_met pt (fst p) |> I_Model.to_string @ {context};
 24.1066 -*)
 24.1067 +(*+isa*)val"[\n(1 ,[1, 2, 3] ,true ,#Given ,Cor Constants [r = 7] , pen2str), \n(2 ,[1, 2, 3] ,true ,#Find ,Cor Maximum A , pen2str), \n(4 ,[1, 2, 3] ,true ,#Relate ,Cor Extremum (A = 2 * u * v - u \<up> 2) , pen2str), \n(5 ,[1, 2] ,true ,#Relate ,Cor SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str), \n(0 ,[2] ,false ,i_model_empty ,Sup FunctionVariable), \n(0 ,[2] ,false ,i_model_empty ,Sup Input_Descript.Domain), \n(0 ,[2] ,false ,i_model_empty ,Sup ErrorBound), \n(3 ,[1, 2, 3] ,true ,#Find ,Cor AdditionalValues [u, v] , pen2str)]"
 24.1068 + = get_obj g_met pt (fst p) |> I_Model.to_string ctxt;
 24.1069 +
 24.1070           (*case*)
 24.1071        Step.do_next p ((pt, Pos.e_pos'), []) (*of*);
 24.1072  (*//------------------ step into Step.do_next ----------------------------------------------\\*)
 24.1073 @@ -935,6 +809,7 @@
 24.1074  
 24.1075      val (_, (p_', tac)) =
 24.1076     Specify.find_next_step ptp;
 24.1077 +(*/////--------------- step into find_next_step --------------------------------------------\\*)
 24.1078  "~~~~~ fun find_next_step , args:"; val ((pt, pos as (_, p_))) = (ptp);
 24.1079      val {meth = met, origin = origin as (oris, o_refs as (_, pI', mI'), _), probl = pbl,
 24.1080        spec = refs, ...} = Calc.specify_data (pt, pos);
 24.1081 @@ -942,12 +817,10 @@
 24.1082        (*if*) Ctree.just_created (pt, pos) andalso origin <> Ctree.e_origin (*else*);
 24.1083          (*if*) p_ = Pos.Pbl (*else*);
 24.1084  
 24.1085 -(*+*)val     "[\n(1 ,[1, 2, 3] ,true ,#Given ,Cor Constants [r = 7] , pen2str), \n(2 ,[1, 2, 3] ,true ,#Find ,Cor Maximum A , pen2str), \n(4 ,[1, 2, 3] ,true ,#Relate ,Cor Extremum (A = 2 * u * v - u \<up> 2) , pen2str), \n(5 ,[1, 2] ,true ,#Relate ,Cor SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str), \n(0 ,[2] ,false ,i_model_empty ,Sup FunctionVariable), \n(0 ,[2] ,false ,i_model_empty ,Sup Input_Descript.Domain), \n(0 ,[2] ,false ,i_model_empty ,Sup ErrorBound), \n(3 ,[1, 2, 3] ,true ,#Find ,Cor AdditionalValues [u, v] , pen2str)]"
 24.1086 - = met |> I_Model.to_string @{context};
 24.1087 -(*isa2* )val "[\n(1 ,[1, 2, 3] ,true ,#Given ,Cor Constants [r = 7] , pen2str), \n(2 ,[1, 2, 3] ,true ,#Find ,Cor Maximum A , pen2str), \n(3 ,[1, 2, 3] ,true ,#Find ,Cor AdditionalValues [u, v] , pen2str), \n(4 ,[1, 2, 3] ,true ,#Relate ,Cor Extremum (A = 2 * u * v - u \<up> 2) , pen2str), \n(5 ,[1, 2] ,true ,#Relate ,Cor SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str), \n(7 ,[1] ,false ,#Given ,Mis FunctionVariable funvar), \n(10 ,[1, 2] ,false ,#Given ,Mis Input_Descript.Domain doma), \n(12 ,[1, 2, 3] ,false ,#Given ,Mis ErrorBound err)]" 
 24.1088 - =( *isa2*) met |> I_Model.to_string @{context};
 24.1089 +(*+isa*)val     "[\n(1 ,[1, 2, 3] ,true ,#Given ,Cor Constants [r = 7] , pen2str), \n(2 ,[1, 2, 3] ,true ,#Find ,Cor Maximum A , pen2str), \n(4 ,[1, 2, 3] ,true ,#Relate ,Cor Extremum (A = 2 * u * v - u \<up> 2) , pen2str), \n(5 ,[1, 2] ,true ,#Relate ,Cor SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str), \n(0 ,[2] ,false ,i_model_empty ,Sup FunctionVariable), \n(0 ,[2] ,false ,i_model_empty ,Sup Input_Descript.Domain), \n(0 ,[2] ,false ,i_model_empty ,Sup ErrorBound), \n(3 ,[1, 2, 3] ,true ,#Find ,Cor AdditionalValues [u, v] , pen2str)]"
 24.1090 + = met |> I_Model.to_string ctxt;
 24.1091  
 24.1092 -(*isa2*)val ("dummy", (Met, Add_Given "FunctionVariable b")) =(*isa2*)
 24.1093 +(**)val ("dummy", (Met, Add_Given "FunctionVariable a")) =(**)
 24.1094     Specify.for_method ctxt oris (o_refs, refs) (pbl, met);
 24.1095  (*///// /------------- step into Step.for_method -------------------------------------------\\*)
 24.1096  "~~~~~ fun for_method , args:"; val (ctxt, oris, ((dI', pI', mI'), (dI, pI, mI)), (_, met))
 24.1097 @@ -958,15 +831,62 @@
 24.1098  val NONE =
 24.1099      (*case*) find_first (I_Model.is_error o #5) met (*of*);
 24.1100  
 24.1101 -(*isa2*)val SOME ("#Given", "FunctionVariable b") =(*isa2*)
 24.1102 +(** )SOME (fd, ct') =( **)
 24.1103 +(**)val return_item_to_add =(**)
 24.1104        (*case*)
 24.1105 -   Specify.item_to_add (ThyC.get_theory ctxt 
 24.1106 -     (if dI = ThyC.id_empty then dI' else dI)) oris mpc met (*of*);
 24.1107 -"~~~~~ fun item_to_add , args:"; val (thy, oris, _, itms)
 24.1108 -  = ((ThyC.get_theory ctxt (if dI = ThyC.id_empty then dI' else dI)), oris, mpc, met);
 24.1109 +   Specify.item_to_add  ctxt oris (I_Model.OLD_to_TEST met) (*of*);
 24.1110 +(*///// //------------ step into item_to_add -----------------------------------------------\\*)
 24.1111 +"~~~~~ fun item_to_add , args:"; val (ctxt, o_model, i_model) = (ctxt, oris, I_Model.OLD_to_TEST met);
 24.1112 +(*+*)val "[\n(1, [\"1\", \"2\", \"3\"], #Given, Constants, [\"[r = 7]\"]), \n(2, [\"1\", \"2\", \"3\"], #Given, Maximum, [\"A\"]), \n(3, [\"1\", \"2\", \"3\"], #Find, AdditionalValues, [\"[u]\", \"[v]\"]), \n(4, [\"1\", \"2\", \"3\"], #Given, Extremum, [\"A = 2 * u * v - u \<up> 2\"]), \n(5, [\"1\", \"2\"], #Given, SideConditions, [\"[(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2]\"]), \n(6, [\"3\"], #Given, SideConditions, [\"[u / 2 = r * sin \<alpha>]\", \"[2 / v = r * cos \<alpha>]\"]), \n(7, [\"1\"], #Given, FunctionVariable, [\"a\"]), \n(8, [\"2\"], #Given, FunctionVariable, [\"b\"]), \n(9, [\"3\"], #Given, FunctionVariable, [\"\<alpha>\"]), \n(10, [\"1\", \"2\"], #Given, Input_Descript.Domain, [\"{0<..<r}\"]), \n(11, [\"3\"], #Given, Input_Descript.Domain, [\"{0<..<\<pi> / 2}\"]), \n(12, [\"1\", \"2\", \"3\"], #Given, ErrorBound, [\"\<epsilon> = 0\"])]"
 24.1113 + = oris |> O_Model.to_string ctxt
 24.1114 +(*+*)val "[\n(1, [1, 2, 3], true ,#Given, (Cor_TEST Constants [r = 7] , pen2str, Position.T)), \n(2, [1, 2, 3], true ,#Find, (Cor_TEST Maximum A , pen2str, Position.T)), \n(4, [1, 2, 3], true ,#Relate, (Cor_TEST Extremum (A = 2 * u * v - u \<up> 2) , pen2str, Position.T)), \n(5, [1, 2], true ,#Relate, (Cor_TEST SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str, Position.T)), \n(0, [2], false ,i_model_empty, (Sup_TEST FunctionVariable, Position.T)), \n(0, [2], false ,i_model_empty, (Sup_TEST Input_Descript.Domain, Position.T)), \n(0, [2], false ,i_model_empty, (Sup_TEST ErrorBound, Position.T)), \n(3, [1, 2, 3], true ,#Find, (Cor_TEST AdditionalValues [u, v] , pen2str, Position.T))]"
 24.1115 + = i_model |> I_Model.to_string_TEST ctxt
 24.1116 +
 24.1117 +    val max_vnt = last_elem (*this decides, for which variant initially help is given*)
 24.1118 +      (Model_Def.max_variants o_model i_model)
 24.1119 +    val o_vnts = filter (fn (_, vnts, _, _, _) => member op= vnts max_vnt) o_model
 24.1120 +    val i_to_select = i_model
 24.1121 +      |> filter_out (fn (_, vnts, _, _, (I_Model.Cor_TEST _, _)) => member op= vnts max_vnt | _ => false)
 24.1122 +      |> select_inc_lists
 24.1123 +(*+*)val "[\n(0, [2], false ,i_model_empty, (Sup_TEST FunctionVariable, Position.T)), \n(0, [2], false ,i_model_empty, (Sup_TEST Input_Descript.Domain, Position.T)), \n(0, [2], false ,i_model_empty, (Sup_TEST ErrorBound, Position.T))]"
 24.1124 + = i_to_select |> I_Model.to_string_TEST ctxt
 24.1125 +
 24.1126 +val false =
 24.1127 +    (*if*) i_to_select = [] (*else*);
 24.1128 +
 24.1129 +(** )val SOME (_, _, _, m_field, (feedb, _)) =( **)
 24.1130 +(**)val return_fill_from_o = (**)
 24.1131 +      (*case*) I_Model.fill_from_o o_vnts (hd i_to_select) (*of*);
 24.1132 +(*///// ///----------- step into fill_from_o -----------------------------------------------\\*)
 24.1133 +"~~~~~ fun fill_from_o , args:"; val (o_model, (i, vnts, bool, _, (feedb, pos))) =
 24.1134 +  (o_vnts, (hd i_to_select));
 24.1135 +    val (m_field, all_value) =
 24.1136 +      case find_first (fn (_, _, _, descr', _) => Pre_Conds.descriptor_exists descr' feedb) o_model of
 24.1137 +        SOME (_, _, m_field, _, ts) =>  (m_field, ts)
 24.1138 +    val descr = Pre_Conds.get_dscr'' feedb (*i_single has been filtered appropriately*)
 24.1139 +val false =
 24.1140 +    (*if*) Pre_Conds.is_list_descr descr (*else*);
 24.1141 +val return_fill_from_o_STEP = SOME (i, vnts, bool, m_field, (Cor_TEST (descr, all_value), pos))
 24.1142 +(*-------------------- stopped after ERROR found ---------------------------------------------*)
 24.1143 +(*\\\\\ \\\----------- step into fill_from_o -----------------------------------------------//*)
 24.1144 +val SOME (_, _, _, m_field, (feedb, _)) = return_fill_from_o
 24.1145 +
 24.1146 +(*||||| ||------------ step into item_to_add -----------------------------------------------//*)
 24.1147 +(*\\\\\ \\\----------- step into item_to_add -----------------------------------------------//*)
 24.1148 +val return_item_to_add_STEP as SOME ("#Given", "FunctionVariable a") =
 24.1149 +  SOME (m_field, feedb |> I_Model.feedb_args_to_string ctxt)
 24.1150 +(*\\\\\ \\------------ step into item_to_add -----------------------------------------------//*)
 24.1151 +val SOME (fd, ct') = return_item_to_add;
 24.1152 +(*||||| |------------- contine.. Step.for_method ---------------------------------------------*)
 24.1153 +val return_for_method_STEP = ("dummy", (Pos.Met, P_Model.mk_additem fd ct'))
 24.1154 +
 24.1155 +(*\\\\\ \------------- step into Step.for_method -------------------------------------------//*)
 24.1156  (*\------------------- step into me_Specify_Method -----------------------------------------//*)
 24.1157 -val (p,_,f,nxt,_,pt) = return_me_Specify_Method
 24.1158  
 24.1159 -val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "Input_Descript.Domain {0<..<r}" = nxt;
 24.1160 +val (p,_,f,nxt,_,pt) = return_me_Specify_Method;
 24.1161 +                                      val Add_Given "FunctionVariable a" = nxt;
 24.1162 +val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "Input_Descript.Domain ({0<..<r})" = nxt
 24.1163  val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "ErrorBound (\<epsilon> = 0)" = nxt;
 24.1164 -
 24.1165 +(*ErRoR type_of: type mismatch in application, bool, bool list, (#) [r = 7] --> 200a-start-method
 24.1166 +val (p,_,f,nxt,_,pt) = me nxt p c pt; val Apply_Method xxx = nxt
 24.1167 +*)
    25.1 --- a/test/Tools/isac/Minisubpbl/400-start-meth-subpbl.sml	Sun Oct 29 07:14:14 2023 +0100
    25.2 +++ b/test/Tools/isac/Minisubpbl/400-start-meth-subpbl.sml	Thu Nov 16 08:15:46 2023 +0100
    25.3 @@ -76,7 +76,7 @@
    25.4          (*if*) p_ = Pos.Pbl (*then*);
    25.5  
    25.6  val return_for_problem as (_, (_, xxx)) =
    25.7 -   Specify.for_problem ctxt oris (o_refs, refs) (pbl, met);
    25.8 +   Specify.for_problem ctxt oris (o_refs, refs) (pbl, I_Model.OLD_to_TEST met);
    25.9  "~~~~~ fun for_problem , args:"; val (ctxt, oris, ((dI', pI', mI'), (dI, pI, mI)), (pbl, met)) =
   25.10    (ctxt, oris, (o_refs, refs), (pbl, met));
   25.11      val cpI = if pI = Problem.id_empty then pI' else pI;
    26.1 --- a/test/Tools/isac/Specify/i-model.sml	Sun Oct 29 07:14:14 2023 +0100
    26.2 +++ b/test/Tools/isac/Specify/i-model.sml	Thu Nov 16 08:15:46 2023 +0100
    26.3 @@ -6,12 +6,14 @@
    26.4  "-----------------------------------------------------------------------------------------------";
    26.5  "table of contents -----------------------------------------------------------------------------";
    26.6  "-----------------------------------------------------------------------------------------------";
    26.7 +"----------- survey on handling of input terms -------------------------------------------------";
    26.8  "----------- investigate fun add_single in I_Model ---------------------------------------------";
    26.9  "----------- build I_Model.init_TEST -----------------------------------------------------------";
   26.10  "----------- exercise preparing I_Model.is_complete --------------------------------------------";
   26.11  "----------- build I_Model.is_complete_OLD -----------------------------------------------------";
   26.12  "----------- build I_Model.s_make_complete -----------------------------------------------------";
   26.13  "----------- check I_Model.s_make_complete for ([], [])-----------------------------------------";
   26.14 +"----------- fun item_to_add -------------------------------------------------------------------";
   26.15  "-----------------------------------------------------------------------------------------------";
   26.16  "-----------------------------------------------------------------------------------------------";
   26.17  "-----------------------------------------------------------------------------------------------";
   26.18 @@ -20,6 +22,77 @@
   26.19  open Test_Code;
   26.20  open Tactic;
   26.21  open Pos; 
   26.22 +open Ctree; 
   26.23 +open Pre_Conds; 
   26.24 +open Specify; 
   26.25 +val ctxt = Proof_Context.init_global @{theory Biegelinie};
   26.26 +
   26.27 +"----------- survey on handling of input terms -------------------------------------------------";
   26.28 +"----------- survey on handling of input terms -------------------------------------------------";
   26.29 +"----------- survey on handling of input terms -------------------------------------------------";
   26.30 +(*//------------------ survey on handling of input terms in specify-phase ------------------\\*)
   26.31 +(*        * ---------- handling of lists -----------------------------------------------------*)
   26.32 +(*         ** ---------- current situation ---------------------------------------------------*)
   26.33 +(** )(*---- from tests -------------------------------------------vvvvvvv *);
   26.34 +val o_single as (3, [1, 2, 3], "#Find", descr, [t1, t2]) = (nth 3 o_model)
   26.35 +val "(3, [\"1\", \"2\", \"3\"], #Find, AdditionalValues, [\"[u]\", \"[v]\"])"
   26.36 +  = O_Model.single_to_string ctxt o_single
   26.37 +val "[u]" = UnparseC.term ctxt t1
   26.38 +val "[v]" = UnparseC.term ctxt t2
   26.39 +( **)
   26.40 +val t as (descr $ vals_term) = @{term "AdditionalValues [u, v]"}
   26.41 +val true = (*if*)Pre_Conds.is_list_descr descr(*else*);
   26.42 +
   26.43 +val values = vals_term |> TermC.isalist2list |> map TermC.single_to_list
   26.44 +val feedb = Cor_TEST (descr, values)
   26.45 +
   26.46 +val "Cor_TEST AdditionalValues [u, v] , pen2str" = feedb |> feedback_TEST_to_string ctxt
   26.47 +
   26.48 +(*get values out of feedback:*)
   26.49 +val [Free ("u", _), Free ("v", _)] = (values |> map TermC.isalist2list  |> flat): term list
   26.50 +
   26.51 +(*         ** ---------- wanted situation ----------------------------------------------------*)
   26.52 +val t as (descr $ vals_term) = @{term "AdditionalValues [u, v]"}
   26.53 +val true = (*if*)Pre_Conds.is_list_descr descr(*else*);
   26.54 +
   26.55 +val values = [vals_term]
   26.56 +val feedb = Cor_TEST (descr, values)
   26.57 +
   26.58 +val "Cor_TEST AdditionalValues [u, v] , pen2str" = feedb |> feedback_TEST_to_string ctxt (*OK*)
   26.59 +
   26.60 +(*get values out of feedback:*)
   26.61 +val "[u, v]" = values |> map (UnparseC.term ctxt) |> hd
   26.62 +
   26.63 +(*        * ---------- handling of NON-lists -------------------------------------------------*)
   26.64 +(*         ** ---------- current situation ---------------------------------------------------*)
   26.65 +(** )(*---- from tests -------------------------------------------vvvvvvv *);
   26.66 +val o_single as (2, [1, 2, 3], "#Find", Const ("Input_Descript.Maximum", _), [Free ("A", _)])
   26.67 +  = (nth 2 o_model) 
   26.68 +( **)
   26.69 +val t as (descr $ vals_term) = @{term "Maximum A"}
   26.70 +val false = (*if*)Pre_Conds.is_list_descr descr(*then*);
   26.71 +
   26.72 +val values = [vals_term]
   26.73 +val feedb = Cor_TEST (descr, values)
   26.74 +
   26.75 +val "Cor_TEST Maximum A , pen2str" = feedb |> feedback_TEST_to_string ctxt (*OK*)
   26.76 +
   26.77 +(*get values out of feedback:*)
   26.78 +val "A" = values |> map (UnparseC.term ctxt) |> hd
   26.79 +
   26.80 +(*         ** ---------- wanted situation ----------------------------------------------------*)
   26.81 +val t as (descr $ vals_term) = @{term "Maximum A"}
   26.82 +val false = (*if*)Pre_Conds.is_list_descr descr(*then*);
   26.83 +
   26.84 +val values = [vals_term]
   26.85 +val feedb = Cor_TEST (descr, values)
   26.86 +
   26.87 +val "Cor_TEST Maximum A , pen2str" = feedb |> feedback_TEST_to_string ctxt (*OK*)
   26.88 +
   26.89 +(*get values out of feedback:*)
   26.90 +val "A" = values |> map (UnparseC.term ctxt) |> hd;
   26.91 +(*\\------------------ survey on handling of input terms in specify-phase ------------------//*)
   26.92 +
   26.93  
   26.94  "----------- investigate fun add_single in I_Model -------------------------------------------";
   26.95  "----------- investigate fun add_single in I_Model -------------------------------------------";
   26.96 @@ -119,8 +192,9 @@
   26.97                [], (pt', pos)));
   26.98  (*-------------------- stop into me Add_Given ------------------------------------------------*)
   26.99  (*\------------------- step into me Add_Given ----------------------------------------------//*)
  26.100 -                                val (p,_,f,nxt,_,pt) = return_me_Add_Given
  26.101 +                                val (p,_,f,nxt,_,pt) = return_me_Add_Given;
  26.102  
  26.103 +(*ErRoR Clash of types "_ \<Rightarrow> _" and "_ list", Randbedingungen :: bool list \<Rightarrow> una, y :: real \<Rightarrow> real* )
  26.104  (*[], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*\<rightarrow>Add_Relation "Randbedingungen [y 0 = 0]"*)
  26.105  
  26.106  (* final test ... BEFORE BREAKING ELEMENTWISE INPUT TO LISTS* )
  26.107 @@ -133,6 +207,8 @@
  26.108    case nxt of Add_Relation "Randbedingungen [y 0 = 0, y L = 0, M_b 0 = 0, M_b L = 0]" => () | _
  26.109      => error "investigate fun add_single CHANGED 1"
  26.110  else error "investigate fun add_single CHANGED 2"
  26.111 +( *ErRoR Clash of types "_ \<Rightarrow> _" and "_ list", Randbedingungen :: bool list \<Rightarrow> una, y :: real \<Rightarrow> real*)
  26.112 +
  26.113  
  26.114  "----------- build I_Model.init_TEST -----------------------------------------------------------";
  26.115  "----------- build I_Model.init_TEST -----------------------------------------------------------";
  26.116 @@ -616,20 +692,172 @@
  26.117  then () else error "s_make_complete: stewise construction <> value of fun"
  26.118  ;
  26.119  (* final test ... ----------------------------------------------------------------------------*)
  26.120 -(pbl_imod_step |> I_Model.to_string_TEST @{context},
  26.121 -  met_imod_step |> I_Model.to_string_TEST @{context}) =
  26.122 -  ("[\n" ^
  26.123 -    "(1, [1, 2, 3], true ,#Given, (Cor_TEST Constants [r = 7] , pen2str, Position.T)), \n" ^
  26.124 -    "(2, [1, 2, 3], true ,#Find, (Cor_TEST Maximum A , pen2str, Position.T)), \n" ^
  26.125 -    "(3, [1, 2, 3], true ,#Find, (Cor_TEST AdditionalValues [u, v] , pen2str, Position.T)), \n" ^
  26.126 -    "(4, [1, 2, 3], true ,#Relate, (Cor_TEST Extremum (A = 2 * u * v - u \<up> 2) , pen2str, Position.T)), \n" ^
  26.127 -    "(5, [1, 2], true ,#Relate, (Cor_TEST SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str, Position.T))]",
  26.128 -  "[\n" ^
  26.129 -    "(1, [1, 2, 3], true ,#Given, (Cor_TEST Constants [r = 7] , pen2str, Position.T)), \n" ^
  26.130 -    "(2, [1, 2, 3], true ,#Find, (Cor_TEST Maximum A , pen2str, Position.T)), \n" ^
  26.131 -    "(4, [1, 2, 3], true ,#Relate, (Cor_TEST Extremum (A = 2 * u * v - u \<up> 2) , pen2str, Position.T)), \n" ^
  26.132 -    "(5, [1, 2], true ,#Relate, (Cor_TEST SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str, Position.T)), \n" ^
  26.133 -    "(7, [1], true ,#undef, (Cor_TEST FunctionVariable a , pen2str, Position.T)), \n" ^
  26.134 -    "(10, [1, 2], true ,#undef, (Cor_TEST Input_Descript.Domain {0<..<r} , pen2str, Position.T)), \n" ^
  26.135 -    "(12, [1, 2, 3], true ,#undef, (Cor_TEST ErrorBound (\<epsilon> = 0) , pen2str, Position.T)), \n" ^
  26.136 -    "(3, [1, 2, 3], true ,#Find, (Cor_TEST AdditionalValues [u, v] , pen2str, Position.T))]")
  26.137 +val "[\n(1, [1, 2, 3], true ,#Given, (Cor_TEST Constants [r = 7] , pen2str, Position.T)), \n(2, [1, 2, 3], true ,#Find, (Cor_TEST Maximum A , pen2str, Position.T)), \n(3, [1, 2, 3], true ,#Find, (Cor_TEST AdditionalValues [u, v] , pen2str, Position.T)), \n(4, [1, 2, 3], true ,#Relate, (Cor_TEST Extremum (A = 2 * u * v - u \<up> 2) , pen2str, Position.T)), \n(5, [1, 2], true ,#Relate, (Cor_TEST SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str, Position.T))]"
  26.138 + = pbl_imod_step |> I_Model.to_string_TEST @{context}
  26.139 +val "[\n(1, [1, 2, 3], true ,#Given, (Cor_TEST Constants [r = 7] , pen2str, Position.T)), \n(2, [1, 2, 3], true ,#Find, (Cor_TEST Maximum A , pen2str, Position.T)), \n(4, [1, 2, 3], true ,#Relate, (Cor_TEST Extremum (A = 2 * u * v - u \<up> 2) , pen2str, Position.T)), \n(5, [1, 2], true ,#Relate, (Cor_TEST SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str, Position.T)), \n(7, [1], true ,#undef, (Cor_TEST FunctionVariable a , pen2str, Position.T)), \n(10, [1, 2], true ,#undef, (Cor_TEST Input_Descript.Domain {0<..<r} , pen2str, Position.T)), \n(12, [1, 2, 3], true ,#undef, (Cor_TEST ErrorBound (\<epsilon> = 0) , pen2str, Position.T)), \n(3, [1, 2, 3], true ,#Find, (Cor_TEST AdditionalValues [u, v] , pen2str, Position.T))]"
  26.140 + = met_imod_step |> I_Model.to_string_TEST @{context};
  26.141 +
  26.142 +"----------- fun item_to_add -------------------------------------------------------------------";
  26.143 +"----------- fun item_to_add -------------------------------------------------------------------";
  26.144 +"----------- fun item_to_add -------------------------------------------------------------------";
  26.145 +(*//------------------ setup test data for item_to_add Maximum-exammple --------------------\\*)
  26.146 +(*
  26.147 +(*+*)val "[\n
  26.148 +  (1, [\"1\", \"2\", \"3\"], #Given, Constants, [\"[r = 7]\"]), \n
  26.149 +  (2, [\"1\", \"2\", \"3\"], #Find, Maximum, [\"A\"]), \n
  26.150 +  (3, [\"1\", \"2\", \"3\"], #Find, AdditionalValues, [\"[u]\", \"[v]\"]), \n
  26.151 +  (4, [\"1\", \"2\", \"3\"], #Relate, Extremum, [\"A = 2 * u * v - u \<up> 2\"]), \n
  26.152 +  (5, [\"1\", \"2\"], #Relate, SideConditions, [\"[(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2]\"]), \n
  26.153 +  (7, [\"1\"], #undef, FunctionVariable, [\"a\"]), \n
  26.154 +  (10, [\"1\", \"2\"], #undef, Input_Descript.Domain, [\"{0<..<r}\"]), \n
  26.155 +  (12, [\"1\", \"2\", \"3\"], #undef, ErrorBound, [\"\<epsilon> = 0\"])]"
  26.156 + = o_model |> O_Model.to_string ctxt
  26.157 +
  26.158 +val true = o_model_test = o_model
  26.159 +*)
  26.160 +val ctxt = @{context}
  26.161 +
  26.162 +val o_model_test = [
  26.163 +  (1, [1, 2, 3], "#Given",  @{term Constants},        [@{term "[r = (7::real)]"}]),
  26.164 +  (2, [1, 2, 3], "#Find",   @{term Maximum},          [@{term "A::real"}            ]),
  26.165 +  (3, [1, 2, 3], "#Find",   @{term AdditionalValues}, [@{term "[u::real]"}, @{term "[v::real]"}]),
  26.166 +  (4, [1, 2, 3], "#Relate", @{term Extremum},         [@{term "A = 2 * u * v - u \<up> 2"}]),
  26.167 +  (5, [1, 2],    "#Relate", @{term SideConditions},   [@{term "[(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2]"}]),
  26.168 +  (7, [1],       "#undef",  @{term FunctionVariable}, [@{term "a::real"}]),
  26.169 +  (10,[1, 2],    "#undef",  @{term Domain},           [@{term "{0<..<(r::real)}"}]),
  26.170 +  (12,[1, 2, 3], "#undef",  @{term ErrorBound},       [@{term "\<epsilon> = (0::real)"}]),
  26.171 +  (0, [1],       "#Find",   @{term solutions},        [@{term "L::real list"}])
  26.172 +];
  26.173 +(*\\------------------ setup test data for item_to_add Maximum-exammple --------------------//*)
  26.174 +
  26.175 +"----------- fun item_to_add: Constants [r = (7::real)] ----------------------------------------";
  26.176 +"----------- fun item_to_add: Constants [r = (7::real)] ----------------------------------------";
  26.177 +val i_single : I_Model.single_TEST =
  26.178 +((3, [1, 2, 3], false, "from o_model", (Inc_TEST (@{term Constants}, []) , Position.none)))
  26.179 +val SOME ("#Given", "Constants [r = 7]") = item_to_add ctxt o_model_test [i_single];
  26.180 +
  26.181 +"----------- fun item_to_add: Maximum A --------------------------------------------------------";
  26.182 +"----------- fun item_to_add: Maximum A --------------------------------------------------------";
  26.183 +val i_single : I_Model.single_TEST =
  26.184 +((3, [1, 2, 3], false, "from o_model", (Inc_TEST (@{term Maximum}, []) , Position.none)))
  26.185 +val SOME ("#Find", "Maximum A") = item_to_add ctxt o_model_test [i_single];
  26.186 +
  26.187 +"----------- fun item_to_add: AdditionalValues [u] ---------------------------------------------";
  26.188 +"----------- fun item_to_add: AdditionalValues [u] ---------------------------------------------";
  26.189 +val i_single : I_Model.single_TEST =
  26.190 +((3, [1, 2, 3], false, "from o_model", (Inc_TEST (@{term AdditionalValues}, []) , Position.none)))
  26.191 +val SOME ("#Find", "AdditionalValues [u]") = item_to_add ctxt o_model_test [i_single];
  26.192 +
  26.193 +"----------- fun item_to_add: AdditionalValues [u, v] ------------------------------------------";
  26.194 +"----------- fun item_to_add: AdditionalValues [u, v] ------------------------------------------";
  26.195 +val i_single : I_Model.single_TEST =
  26.196 +((3, [1, 2, 3], false, "from o_model", (Inc_TEST (@{term AdditionalValues}, [@{term "[u::real]"}]) , Position.none)))
  26.197 +(**)val SOME ("#Find", "AdditionalValues [u, v]") = item_to_add ctxt o_model_test [i_single];
  26.198 +
  26.199 +"----------- fun item_to_add: AdditionalValues [v, u] ------------------------------------------";
  26.200 +"----------- fun item_to_add: AdditionalValues [v, u] ------------------------------------------";
  26.201 +(*/------------------- fun item_to_add: AdditionalValues [v, u] ----------------------------\\*)
  26.202 +val i_single : I_Model.single_TEST =
  26.203 +(*present [v, u] (reverse order), because second element has been input first ------vvvvvvvvvv*)
  26.204 +((3, [1, 2, 3], false, "from o_model", (Inc_TEST (@{term AdditionalValues}, [@{term "[v::real]"}]) , Position.none)))
  26.205 +
  26.206 +(**)val return_item_to_add as SOME ("#Find", "AdditionalValues [v, u]") = (**)
  26.207 +(** )val calling_code as SOME ("#Find", "AdditionalValues [v, u]") =( **)
  26.208 +           item_to_add ctxt o_model_test [i_single];
  26.209 +(*//------------------ step into item_to_add -----------------------------------------------\\*)
  26.210 +"~~~~~ fun item_to_add , args:"; val (ctxt, o_model, i_model) = (ctxt, o_model_test, [i_single]);
  26.211 +    val max_vnt = last_elem (*this decides, for which variant initially help is given*)
  26.212 +      (Model_Def.max_variants o_model i_model)
  26.213 +    val o_vnts = filter (fn (_, vnts, _, _, _) => member op= vnts max_vnt) o_model
  26.214 +    val i_to_select = i_model
  26.215 +      |> filter_out (fn (_, vnts, _, _, (I_Model.Cor_TEST _, _)) => member op= vnts max_vnt | _ => false)
  26.216 +      |> select_inc_lists
  26.217 +(*+*)val "[\n(3, [1, 2, 3], false ,from o_model, (Inc_TEST AdditionalValues [v] , pen2str, Position.T))]"
  26.218 + = i_to_select |> I_Model.to_string_TEST ctxt
  26.219 +
  26.220 +val false =
  26.221 +    (*if*) i_to_select = []
  26.222 +
  26.223 +(**)val return_fill_from_o =(**)
  26.224 +(** )val SOME (_, _, _, m_field, (feedb, _)) =( **) (*case*)
  26.225 +(*I_Model.*)fill_from_o o_vnts (hd i_to_select) (*of*);
  26.226 +(*///----------------- step into fill_from_o -----------------------------------------------\\*)
  26.227 +"~~~~~ fun fill_from_o , args:"; val (o_model, (i, vnts, bool, _, (feedb, pos))) =
  26.228 +  (o_vnts, (hd i_to_select));
  26.229 +    val (m_field, all_value) =
  26.230 +      case find_first (fn (_, _, _, descr', _) => Pre_Conds.descriptor_exists descr' feedb) o_model of
  26.231 +        SOME (_, _, m_field, _, ts) =>  (m_field, ts)
  26.232 +      | NONE => raise ERROR "I_Model.fill_from_o does NOT find a descriptor in O_Model"
  26.233 +    val descr = Pre_Conds.get_dscr'' feedb (*i_single has been filtered appropriately*)
  26.234 +(*+*)val "[[u], [v]]" = all_value |> UnparseC.terms ctxt
  26.235 +
  26.236 +val true =
  26.237 +    (*if*) Pre_Conds.is_list_descr descr
  26.238 +        val all_value' as [Free ("u", _), Free ("v", _)] = unpack_values (descr, all_value)
  26.239 +        val already_input as [Free ("v", _)] = feedb |> values_TEST' |> map TermC.isalist2list |> flat
  26.240 +        val miss as [Free ("u", _)] = subtract op= already_input all_value'
  26.241 +        val present as [Free ("v", _), Free ("u", _)] = already_input @ [hd miss]
  26.242 +(*--- already_input ---------^^^^^*)
  26.243 +val true =
  26.244 +        (*if*) length all_value' = length present
  26.245 +val return_fill_from_o_STEP = SOME (i, vnts, bool, m_field, (Cor_TEST (descr, present), pos))
  26.246 +(*\\\----------------- step into fill_from_o -----------------------------------------------//*)
  26.247 +        val SOME (_, _, _, m_field, (feedb, _)) = return_fill_from_o
  26.248 +(*+*)val Cor_TEST (Const ("Input_Descript.AdditionalValues", _), [Free ("v", _), Free ("u", _)])
  26.249 +  = feedb;
  26.250 +
  26.251 +(*||------------------ contiue.. item_to_add -------------------------------------------------*)
  26.252 +(** )val return_item_to_add = ( **)
  26.253 +  SOME (m_field, feedb |> 
  26.254 +   I_Model.feedb_args_to_string ctxt);
  26.255 +(*///----------------- step into feedb_args_to_string --------------------------------------\\*)
  26.256 +"~~~~~ fun feedb_args_to_string , args:"; val (ctxt, Cor_TEST (descr, values)) = (ctxt, feedb);
  26.257 +(** )val return_feedb_args_to_string =( **)
  26.258 +(**)val return_descr_vals_to_string =(**)
  26.259 +           descr_vals_to_string ctxt (descr, values);
  26.260 +(*////---------------- step into descr_vals_to_string --------------------------------------\\*)
  26.261 +"~~~~~ fun descr_vals_to_string , args:"; val (ctxt, (descr, values)) = (ctxt, (descr, values));
  26.262 +val true =
  26.263 +    (*if*) Pre_Conds.is_list_descr descr
  26.264 +(*+*)val [Free ("v", _), Free ("u", _)] = values
  26.265 +
  26.266 +(**)val false =(**)
  26.267 +(*if*) Pre_Conds.is_NObrack_list descr values;
  26.268 +(*/////--------------- step into is_NObrack_list --------------------------------------------\\*)
  26.269 +"~~~~~ fun is_NObrack_list , args:"; val (ctxt, (descr, values)) = (ctxt, (descr, present));
  26.270 +    val max_expl as (max_descr, max_values) =
  26.271 +      (@{term AdditionalValues}, [@{term "u::real"}, @{term "v::real"}])
  26.272 +    val bieg_expl as (bieg_descr, bieg_values) =
  26.273 +      (@{term Randbedingungen}, 
  26.274 +       [@{term "(y::real \<Rightarrow> real) 0 = (0::real)"}, @{term "(y::real \<Rightarrow> real) L = (0::real)"},
  26.275 +         @{term "M_b 0 = (0::real)"}, @{term "M_b L = (0::real)"}])
  26.276 +val return_is_NObrack_list_STEP as false =
  26.277 +    (*if*) not
  26.278 +    ((descr = max_descr andalso subset op= (values, max_values)) orelse
  26.279 +     (descr = bieg_descr andalso subset op= (values, bieg_values)))
  26.280 +(*\\\\\--------------- step into is_NObrack_list --------------------------------------------//*)
  26.281 +(*\\\\---------------- step into descr_vals_to_string --------------------------------------//*)
  26.282 +(*\\\----------------- step into feedb_args_to_string --------------------------------------//*)
  26.283 +(*\\------------------ step into item_to_add -----------------------------------------------//*)
  26.284 +val calling_code as SOME ("#Find", "AdditionalValues [v, u]") = return_item_to_add;
  26.285 +(*\------------------- fun item_to_add: AdditionalValues [v, u] ----------------------------//*)
  26.286 +
  26.287 +"----------- fun item_to_add: Extremum (A = 2 * u * v - u \<up> 2) ---------------------------------";
  26.288 +"----------- fun item_to_add: Extremum (A = 2 * u * v - u \<up> 2) ---------------------------------";
  26.289 +val i_single : I_Model.single_TEST =
  26.290 +((3, [1, 2, 3], false, "from o_model", (Inc_TEST (@{term Extremum}, []) , Position.none)))
  26.291 +val SOME ("#Relate", "Extremum (A = 2 * u * v - u \<up> 2)")
  26.292 +  = item_to_add ctxt o_model_test [i_single];
  26.293 +
  26.294 +"----------- fun item_to_add: SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] ----------------";
  26.295 +"----------- fun item_to_add: SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] ----------------";
  26.296 +val i_single : I_Model.single_TEST =
  26.297 +((3, [1, 2, 3], false, "from o_model", (Inc_TEST (@{term SideConditions}, []) , Position.none)))
  26.298 +val SOME ("#Relate", "SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2]")
  26.299 +  = item_to_add ctxt o_model_test [i_single];
  26.300 +
  26.301 +"----------- fun item_to_add: Solutions L ------------------------------------------------------";
  26.302 +"----------- fun item_to_add: Solutions L ------------------------------------------------------";
  26.303 +val i_single : I_Model.single_TEST =
  26.304 +((3, [1, 2, 3], false, "from o_model", (Inc_TEST (@{term solutions}, []) , Position.none)))
  26.305 +val SOME ("#Find", "solutions L") = item_to_add ctxt o_model_test [i_single];
    27.1 --- a/test/Tools/isac/Specify/refine.sml	Sun Oct 29 07:14:14 2023 +0100
    27.2 +++ b/test/Tools/isac/Specify/refine.sml	Thu Nov 16 08:15:46 2023 +0100
    27.3 @@ -428,7 +428,7 @@
    27.4  (*+*)val "[[0 = - 1 * c_4 / - 1], [0 =\n (- 24 * c_4 + - 24 * L * c_3 + 12 * L \<up> 2 * c_2 + 4 * L \<up> 3 * c +\n  - 1 * L \<up> 4 * q_0) /\n - 24], [0 = c_2], [0 = (2 * c_2 + 2 * L * c + - 1 * L \<up> 2 * q_0) / 2]]"
    27.5   = ts |> UnparseC.terms @{context}
    27.6  
    27.7 -      val ts = if Model_Pattern.is_list_descr descr
    27.8 +      val ts = if Pre_Conds.is_list_descr descr
    27.9          then if TermC.is_list (hd ts)
   27.10            then ts |> map TermC.isalist2list |> flat
   27.11            else ts
   27.12 @@ -557,7 +557,7 @@
   27.13          (*if*) p_ = Pos.Pbl (*then*);
   27.14  
   27.15    val ("dummy", (Pbl, Add_Find "solutions L")) =
   27.16 -           for_problem ctxt oris (o_refs, refs) (pbl, met);
   27.17 +           for_problem ctxt oris (o_refs, refs) (pbl, I_Model.OLD_to_TEST met);
   27.18  "~~~~~ fun for_problem , args:"; val (oris, ((dI', pI', mI'), (dI, pI, mI)), (pbl, met)) =
   27.19    (oris, (o_refs, refs), (pbl, met));
   27.20      val cpI = if pI = Problem.id_empty then pI' else pI;
   27.21 @@ -569,7 +569,7 @@
   27.22        (*if*) pI' = Problem.id_empty andalso pI = Problem.id_empty (*else*);
   27.23        val NONE = (*case*) find_first (I_Model.is_error o #5) pbl (*of*);
   27.24        val SOME ("#Find", "solutions L") = (*case*)
   27.25 -        item_to_add (ThyC.get_theory @{context} (if dI = ThyC.id_empty then dI' else dI)) oris pbt pbl (*of*);
   27.26 +        item_to_add ctxt oris (I_Model.OLD_to_TEST pbl);
   27.27        (*if*) not preok (*then*);
   27.28  
   27.29  (*+*)Pre_Conds.to_string @{context} xxxxx = "[\n" ^
    28.1 --- a/test/Tools/isac/Test_Isac.thy	Sun Oct 29 07:14:14 2023 +0100
    28.2 +++ b/test/Tools/isac/Test_Isac.thy	Thu Nov 16 08:15:46 2023 +0100
    28.3 @@ -343,7 +343,177 @@
    28.4    ML_file "Knowledge/diff-app.sml"        (* postponed to dev. specification | TP-prog. *)
    28.5    ML_file "Knowledge/biegelinie-1.sml"
    28.6    ML_file "Knowledge/biegelinie-2.sml"                                        (*Test_Isac_Short*)
    28.7 -  ML_file "Knowledge/biegelinie-3.sml"                                        (*Test_Isac_Short*)
    28.8 +(*ML_file "Knowledge/biegelinie-3.sml"     (*due to ---vvv*)                 ( *Test_Isac_Short*)
    28.9 +ML \<open>
   28.10 +\<close> ML \<open>
   28.11 +(* Title:  Knowledge/biegelinie-3.sml
   28.12 +   Author: Walther Neuper 050826
   28.13 +   (c) due to copyright terms
   28.14 +*)
   28.15 +"-----------------------------------------------------------------";
   28.16 +"table of contents -----------------------------------------------";
   28.17 +"-----------------------------------------------------------------";
   28.18 +"----------- SubProblem: auto method [Biegelinien,setzeRandbedingungenEin]--------------------";
   28.19 +"----------- SubProblem: me method [Biegelinien,setzeRandbedingungenEin]----------------------";
   28.20 +"---------------------------------------------------------------------------------------------";
   28.21 +"---------------------------------------------------------------------------------------------";
   28.22 +"---------------------------------------------------------------------------------------------";
   28.23 +
   28.24 +
   28.25 +"----------- SubProblem: auto method [Biegelinien,setzeRandbedingungenEin]--------------------";
   28.26 +"----------- SubProblem: auto method [Biegelinien,setzeRandbedingungenEin]--------------------";
   28.27 +"----------- SubProblem: auto method [Biegelinien,setzeRandbedingungenEin]--------------------";
   28.28 +val fmz = ["Funktionen [Q x = c + - 1 * q_0 * x," ^
   28.29 +    "M_b x = c_2 + c * x + - 1 * q_0 / 2 * x \<up> 2," ^
   28.30 +    "y' x = c_3 + 1 / (- 1 * EI) * (c_2 * x + c / 2 * x \<up> 2 + - 1 * q_0 / 6 * x \<up> 3)," ^
   28.31 +    "y x = c_4 + c_3 * x + 1 / (- 1 * EI) * (c_2 / 2 * x \<up> 2 + c / 6 * x \<up> 3 + - 1 * q_0 / 24 * x \<up> 4)]",
   28.32 +	   "Randbedingungen [y 0 = (0::real), y L = 0, M_b 0 = 0, M_b L = 0]",
   28.33 +	   "Gleichungen equ_s"];
   28.34 +val (dI',pI',mI') = ("Biegelinie", ["setzeRandbedingungen", "Biegelinien"],
   28.35 +		     ["Biegelinien", "setzeRandbedingungenEin"]);
   28.36 +
   28.37 +States.reset ();  
   28.38 +CalcTree @{context} [(fmz, (dI',pI',mI'))];
   28.39 +Iterator 1;
   28.40 +moveActiveRoot 1;
   28.41 +autoCalculate 1 CompleteCalc;
   28.42 +
   28.43 +val ((pt, p),_) = States.get_calc 1;
   28.44 +if p = ([], Res) andalso (get_obj g_res pt (fst p) |> UnparseC.term @{context}) =
   28.45 +  "[0 = - 1 * c_4 / - 1,\n 0 =\n (- 24 * c_4 + - 24 * L * c_3 + 12 * L \<up> 2 * c_2 + 4 * L \<up> 3 * c +\n  - 1 * L \<up> 4 * q_0) /\n - 24,\n 0 = c_2, 0 = (2 * c_2 + 2 * L * c + - 1 * L \<up> 2 * q_0) / 2]"
   28.46 +(*"[0 = - 1 * c_4 / - 1,\n 0 =\n (- 24 * c_4 * EI + - 24 * L * c_3 * EI + 12 * L \<up> 2 * c_2 +\n  4 * L \<up> 3 * c +\n  - 1 * L \<up> 4 * q_0) /\n (- 24 * EI),\n 0 = c_2, 0 = (2 * c_2 + 2 * L * c + - 1 * L \<up> 2 * q_0) / 2]"
   28.47 +  ^^^ BEFORE fun Calc_Binop.simplify IS EVALUATEDO BY Simplifier.rewrite  *)
   28.48 +then () else error "auto method [Biegelinien,setzeRandbedingungenEin] changed";
   28.49 +
   28.50 +
   28.51 +"----------- SubProblem: me method [Biegelinien,setzeRandbedingungenEin]----------------------";
   28.52 +"----------- SubProblem: me method [Biegelinien,setzeRandbedingungenEin]----------------------";
   28.53 +"----------- SubProblem: me method [Biegelinien,setzeRandbedingungenEin]----------------------";
   28.54 +val fmz = ["Funktionen [Q x = c + - 1 * q_0 * x," ^
   28.55 +    "M_b x = c_2 + c * x + - 1 * q_0 / 2 * x \<up> 2," ^
   28.56 +    "y' x = c_3 + 1 / (- 1 * EI) * (c_2 * x + c / 2 * x \<up> 2 + - 1 * q_0 / 6 * x \<up> 3)," ^
   28.57 +    "y x = c_4 + c_3 * x + 1 / (- 1 * EI) * (c_2 / 2 * x \<up> 2 + c / 6 * x \<up> 3 + - 1 * q_0 / 24 * x \<up> 4)]",
   28.58 +	   "Randbedingungen [y 0 = (0::real), y L = 0, M_b 0 = 0, M_b L = 0]",
   28.59 +	   "Gleichungen equ_s"];
   28.60 +val (dI',pI',mI') = ("Biegelinie", ["setzeRandbedingungen", "Biegelinien"],
   28.61 +		     ["Biegelinien", "setzeRandbedingungenEin"]);
   28.62 +val p = e_pos'; val c = [];
   28.63 +val (p,_,f,nxt,_,pt) = Test_Code.init_calc @{context} [(fmz, (dI',pI',mI'))];
   28.64 +val (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
   28.65 +val (p,_,f,nxt,_,pt) = me nxt p c pt;
   28.66 +(*[], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "Funktionen [M_b x = c_2 + c * x + - 1 * q_0 / 2 * x \<up> 2, Q x = c + - 1 * q_0 * x, y' x =\nc_3 +\n1 / (- 1 * EI) * (c_2 * x + c / 2 * x \<up> 2 + - 1 * q_0 / 6 * x \<up> 3), y x =\nc_4 + c_3 * x +\n1 / (- 1 * EI) *\n(c_2 / 2 * x \<up> 2 + c / 6 * x \<up> 3 + - 1 * q_0 / 24 * x \<up> 4)]" = nxt
   28.67 +(*[], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "Randbedingungen [y 0 = 0]" = nxt
   28.68 +(*[], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "Randbedingungen [y 0 = 0, y L = 0]" = nxt
   28.69 +(*[], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "Randbedingungen [y 0 = 0, y L = 0, M_b 0 = 0]" = nxt
   28.70 +(*[], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "Randbedingungen [y L = 0, y 0 = 0, M_b 0 = 0, M_b L = 0]" = nxt
   28.71 +\<close> ML \<open>
   28.72 +(*//----------- exception TERM raised (line 406 of ".."): isalist2list applied to NON-list: equ_s
   28.73 +                since update of fun item_to_add, successor of CS f10bbfb2b3bb * )
   28.74 +(*[], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p c pt;
   28.75 +val xxx = nxt
   28.76 +(*[], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p c pt;
   28.77 +val Specify_Problem ["setzeRandbedingungen", "Biegelinien"] = nxt
   28.78 +(*[], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Specify_Method ["Biegelinien", "setzeRandbedingungenEin"] = nxt
   28.79 +(*[], Met*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Apply_Method ["Biegelinien", "setzeRandbedingungenEin"] = nxt
   28.80 +;
   28.81 +
   28.82 +"----- Randbedingung y 0 = 0 in SUBpbl with met [Equation, fromFunction]";
   28.83 +(*[1], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Model_Problem = nxt
   28.84 +;
   28.85 +(*+*)if (#1 o (get_obj g_fmz pt)) (fst p) =
   28.86 +(*+*)   ["functionEq\n (y x =\n  c_4 + c_3 * x +\n  1 / (- 1 * EI) *" ^
   28.87 +(*+*)     "\n  (c_2 / 2 * x \<up> 2 + c / 6 * x \<up> 3 + - 1 * q_0 / 24 * x \<up> 4))",
   28.88 +(*+*)     "substitution (y 0 = 0)", "equality equ'''"] then ()
   28.89 +(*+*)else error "Met setzeRandbedingungenEin CHANGED";
   28.90 +
   28.91 +(*+*)(writeln o Istate.string_of @{context}) (get_istate_LI pt p);
   28.92 +"--- after 1.subpbl [Equation, fromFunction]";
   28.93 +
   28.94 +(*[1], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "functionEq\n (y x =\n  c_4 + c_3 * x +\n  1 / (- 1 * EI) *\n  (c_2 / 2 * x \<up> 2 + c / 6 * x \<up> 3 + - 1 * q_0 / 24 * x \<up> 4))" = nxt
   28.95 +(*[1], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
   28.96 +(*[1], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
   28.97 +(*[1], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p c pt;
   28.98 +(*[1], Met*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Apply_Method ["Equation", "fromFunction"] = nxt
   28.99 +
  28.100 +(*[1, 1], Frm*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val "y x =\nc_4 + c_3 * x +\n1 / (- 1 * EI) *\n(c_2 / 2 * x \<up> 2 + c / 6 * x \<up> 3 + - 1 * q_0 / 24 * x \<up> 4)" = f2str f
  28.101 +                                                     val Substitute ["x = 0"] = nxt
  28.102 +(*[1, 1], Res*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Substitute ["y 0 = 0"] = nxt
  28.103 +(*[1, 2], Res*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Rewrite_Set "norm_Rational" = nxt
  28.104 +(*[1, 3], Res*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val "0 = - 1 * c_4 / - 1" = f2str f
  28.105 +                                                     val Check_Postcond ["makeFunctionTo", "equation"] = nxt
  28.106 +;
  28.107 +"--- before 2.subpbl [Equation, fromFunction]";
  28.108 +(*[1], Res*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val "0 = - 1 * c_4 / - 1" = f2str f
  28.109 +                                                  val Subproblem ("Biegelinie", ["makeFunctionTo", "equation"]) = nxt
  28.110 +(*[2], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Model_Problem = nxt;
  28.111 +
  28.112 +(*+*)if (#1 o (get_obj g_fmz pt)) (fst p) =
  28.113 +(*+*)    ["functionEq\n (y x =\n  c_4 + c_3 * x +\n  1 / (- 1 * EI) *\n  (c_2 / 2 * x \<up> 2 + c / 6 * x \<up> 3 + - 1 * q_0 / 24 * x \<up> 4))",
  28.114 +(*+*)      "substitution (y L = 0)", "equality equ'''"] then ()
  28.115 +(*+*)else error "biegelinie.sml metsetzeRandbed*Ein bb ";
  28.116 +
  28.117 +(*[2], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "functionEq\n (y x =\n  c_4 + c_3 * x +\n  1 / (- 1 * EI) *\n  (c_2 / 2 * x \<up> 2 + c / 6 * x \<up> 3 + - 1 * q_0 / 24 * x \<up> 4))" = nxt
  28.118 +val (p,_,f,nxt,_,pt) = me nxt p c pt; val (p,_,f,nxt,_,pt) = me nxt p c pt;
  28.119 +val (p,_,f,nxt,_,pt) = me nxt p c pt; val (p,_,f,nxt,_,pt) = me nxt p c pt;
  28.120 +(*[2], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Specify_Method ["Equation", "fromFunction"] = nxt
  28.121 +(*[2], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Apply_Method ["Equation", "fromFunction"] = nxt
  28.122 +
  28.123 +(*[2, 1], Frm*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val "y x =\nc_4 + c_3 * x +\n1 / (- 1 * EI) *\n(c_2 / 2 * x \<up> 2 + c / 6 * x \<up> 3 + - 1 * q_0 / 24 * x \<up> 4)" = f2str f
  28.124 +                                                     val Substitute ["x = L"] = nxt
  28.125 +(*[2, 1], Res*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val "y L =\nc_4 + c_3 * L +\n1 / (- 1 * EI) *\n(c_2 / 2 * L \<up> 2 + c / 6 * L \<up> 3 + - 1 * q_0 / 24 * L \<up> 4)" = f2str f
  28.126 +                                                     val Substitute ["y L = 0"] = nxt
  28.127 +(*[2, 2], Res*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val "0 =\nc_4 + c_3 * L +\n1 / (- 1 * EI) *\n(c_2 / 2 * L \<up> 2 + c / 6 * L \<up> 3 + - 1 * q_0 / 24 * L \<up> 4)" = f2str f
  28.128 +                                                     val Rewrite_Set "norm_Rational" = nxt
  28.129 +(*[2, 3], Res*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val "0 =\n(- 24 * c_4 + - 24 * L * c_3 + 12 * L \<up> 2 * c_2 + 4 * L \<up> 3 * c +\n - 1 * L \<up> 4 * q_0) /\n- 24" = f2str f
  28.130 +                                                     val Check_Postcond ["makeFunctionTo", "equation"] = nxt
  28.131 +
  28.132 +(*[2], Res*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val "0 =\n(- 24 * c_4 + - 24 * L * c_3 + 12 * L \<up> 2 * c_2 + 4 * L \<up> 3 * c +\n - 1 * L \<up> 4 * q_0) /\n- 24" = f2str f
  28.133 +                                                  val Subproblem ("Biegelinie", ["makeFunctionTo", "equation"]) = nxt
  28.134 +val (p,_,f,nxt,_,pt) = me nxt p c pt; val (p,_,f,nxt,_,pt) = me nxt p c pt;
  28.135 +
  28.136 +val (p,_,f,nxt,_,pt) = me nxt p c pt; val (p,_,f,nxt,_,pt) = me nxt p c pt;
  28.137 +val (p,_,f,nxt,_,pt) = me nxt p c pt; val (p,_,f,nxt,_,pt) = me nxt p c pt;
  28.138 +
  28.139 +(*[3], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Specify_Method ["Equation", "fromFunction"] = nxt
  28.140 +(*[3], Met*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Apply_Method ["Equation", "fromFunction"] = nxt
  28.141 +
  28.142 +(*[3, 1], Frm*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val "M_b x = c_2 + c * x + - 1 * q_0 / 2 * x \<up> 2" = f2str f
  28.143 +                                                     val Substitute ["x = 0"] = nxt
  28.144 +(*[3, 1], Res*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val "M_b 0 = c_2 + c * 0 + - 1 * q_0 / 2 * 0 \<up> 2" = f2str f
  28.145 +                                                     val Substitute ["M_b 0 = 0"] = nxt
  28.146 +(*[3, 2], Res*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val "0 = c_2 + c * 0 + - 1 * q_0 / 2 * 0 \<up> 2" = f2str f
  28.147 +                                                     val Rewrite_Set "norm_Rational" = nxt
  28.148 +(*[3, 3], Res*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val "0 = c_2" = f2str f
  28.149 +                                                     val Check_Postcond ["makeFunctionTo", "equation"] = nxt
  28.150 +(*[3], Res*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val "0 = c_2" = f2str f
  28.151 +                                                     val Subproblem ("Biegelinie", ["makeFunctionTo", "equation"]) = nxt
  28.152 +
  28.153 +val (p,_,f,nxt,_,pt) = me nxt p c pt; val (p,_,f,nxt,_,pt) = me nxt p c pt;
  28.154 +val (p,_,f,nxt,_,pt) = me nxt p c pt; val (p,_,f,nxt,_,pt) = me nxt p c pt;
  28.155 +val (p,_,f,nxt,_,pt) = me nxt p c pt; val (p,_,f,nxt,_,pt) = me nxt p c pt;
  28.156 +(*[4], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Specify_Method ["Equation", "fromFunction"] = nxt
  28.157 +(*[4], Met*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val Apply_Method ["Equation", "fromFunction"] = nxt
  28.158 +
  28.159 +(*[4, 1], Frm*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val "M_b x = c_2 + c * x + - 1 * q_0 / 2 * x \<up> 2" = f2str f
  28.160 +                                                     val Substitute ["x = L"] = nxt
  28.161 +(*[4, 1], Res*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val "M_b L = c_2 + c * L + - 1 * q_0 / 2 * L \<up> 2" = f2str f
  28.162 +                                                     val Substitute ["M_b L = 0"] = nxt
  28.163 +(*[4, 2], Res*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val "0 = c_2 + c * L + - 1 * q_0 / 2 * L \<up> 2" = f2str f
  28.164 +                                                     val Rewrite_Set "norm_Rational" = nxt
  28.165 +(*[4, 3], Res*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val "0 = (2 * c_2 + 2 * L * c + - 1 * L \<up> 2 * q_0) / 2" = f2str f
  28.166 +                                                     val Check_Postcond ["makeFunctionTo", "equation"] = nxt
  28.167 +(*[4], Res*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val "0 = (2 * c_2 + 2 * L * c + - 1 * L \<up> 2 * q_0) / 2" = f2str f
  28.168 +                                                  val Check_Postcond ["setzeRandbedingungen", "Biegelinien"] = nxt
  28.169 +
  28.170 +(*WN230825 outcommented version                      "[0 = c_4,\n             0 =\n c_4 + L * c_3 +\n (12 * L \<up> 2 * c_2 + 4 * L \<up> 3 * c + - 1 * L \<up> 4 * q_0) / (- 24 * EI),\n           0 = c_2, 0 = (2 * c_2 + 2 * L * c + - 1 * L \<up> 2 * q_0) / 2]" *)
  28.171 +(*WN230825 active version (outcommented since ???    "[0 = c_4,\n             0 =\n c_4 + L * c_3 +\n (12 * L \<up> 2 * c_2 + 4 * L \<up> 3 * c + - 1 * L \<up> 4 * q_0) /\n (- 1 * EI * 24),\n     0 = c_2, 0 = (2 * c_2 + 2 * L * c + - 1 * L \<up> 2 * q_0) / 2]"*)
  28.172 +(*[], Res*)val (p,_,f,nxt,_,pt) = me nxt p c pt; val "[0 = - 1 * c_4 / - 1,\n 0 =\n (- 24 * c_4 + - 24 * L * c_3 + 12 * L \<up> 2 * c_2 + 4 * L \<up> 3 * c +\n  - 1 * L \<up> 4 * q_0) /\n - 24,\n 0 = c_2, 0 = (2 * c_2 + 2 * L * c + - 1 * L \<up> 2 * q_0) / 2]" = f2str f
  28.173 +                                                 val End_Proof' = nxt
  28.174 +( *\\----------- exception TERM raised (line 406 of ".."): isalist2list applied to NON-list: equ_s*)
  28.175 +
  28.176 +
  28.177 +\<close> ML \<open>
  28.178 +\<close>
  28.179  (*ML_file "Knowledge/biegelinie-4.sml" (*with M_Model.match_itms_oris broken in |> me'*)*)
  28.180    ML_file "Knowledge/algein.sml"
  28.181    ML_file "Knowledge/diophanteq.sml"
    29.1 --- a/test/Tools/isac/Test_Theory.thy	Sun Oct 29 07:14:14 2023 +0100
    29.2 +++ b/test/Tools/isac/Test_Theory.thy	Thu Nov 16 08:15:46 2023 +0100
    29.3 @@ -27,9 +27,14 @@
    29.4  "~~~~~ and xxx , args:"; val () = ();
    29.5  "~~~~~ from fun xxx \<longrightarrow>fun yyy \<longrightarrow>fun zzz , return:"; val () = ();
    29.6  "~~~~~ continue fun xxx"; val () = ();
    29.7 -(*if*) (*then*); (*else*); (*andalso*)  (*case*) (*of*);  (*return value*); (*in*) (*end*);
    29.8 -"xx"
    29.9 -^ "xxx"   (*+*) (*+++*) (*keep for continuing YYYYY*) (*isa*) (*isa2*) (**)
   29.10 +(*if*) (*then*); (*else*); (*andalso*)  (*case*) (*of*);  (*return value*); 
   29.11 +(*let*) (*in*) (*end*); (*map:*)
   29.12 +"xx"^ "xxx"   (*+*) (*+++*) (*isa*) (*isa2*) (**)
   29.13 +
   29.14 +\<close> ML \<open> (*//----------- inserted adhoc ------------------------------------------------------\\*)
   29.15 +(*//------------------ inserted adhoc ------------------------------------------------------\\*)
   29.16 +(*\\------------------ inserted adhoc ------------------------------------------------------//*)
   29.17 +\<close> ML \<open> (*\\----------- inserted adhoc ------------------------------------------------------//*)
   29.18  
   29.19  \<close> ML \<open> (*--------------locate below ~~~ fun XXXXX, asap shift into separate section above ----*)
   29.20  \<close> ML \<open> (*//----------- build fun XXXXX -----------------------------------------------------\\*)
   29.21 @@ -42,29 +47,49 @@
   29.22  (*\\------------------ setup test data for XXXXX -------------------------------------------//*)
   29.23  \<close> ML \<open> (*\\----------- setup test data for XXXXX -------------------------------------------//*)
   29.24  
   29.25 -val return_XXXXX = "XXXXX"
   29.26 +(* final test ... ----------------------------------------------------------------------------*)
   29.27 +
   29.28 +\<close> ML \<open> (*=== not needed @{context} \<longrightarrow> ctxt except args of init_calc*)
   29.29 +(*//################## @ {context} within fun XXXXX ---------------------------------------\\* )
   29.30 +(*-------------------- there must not be > ML < inbetween-------------------------------------*)
   29.31 +( *\\################# @ {context} within fun XXXXX ----------------------------------------//*)
   29.32 +
   29.33 +\<close> ML \<open> (*//----------- inserted hidden code ------------------------------------------------\\*)
   29.34 +(*//------------------ inserted hidden code ------------------------------------------------\\*)
   29.35 +(*\\------------------ inserted hidden code ------------------------------------------------//*)
   29.36 +\<close> ML \<open> (*\\----------- inserted hidden code ------------------------------------------------//*)
   29.37 +
   29.38 +
   29.39 +(** )val calling_code =( **)
   29.40 +(**)val return_XXXXX =(**)
   29.41 +  "call XXXXX";
   29.42  \<close> ML \<open> (*//----------- step into XXXXX -----------------------------------------------------\\*)
   29.43  (*//------------------ step into XXXXX -----------------------------------------------------\\*)
   29.44  \<close> ML \<open> (*||----------- contine.. XXXXX -------------------------------------------------------*)
   29.45  (*||------------------ contine.. XXXXX -------------------------------------------------------*)
   29.46  (*\\------------------ step into XXXXX -----------------------------------------------------//*)
   29.47  \<close> ML \<open> (*\\----------- step into XXXXX -----------------------------------------------------//*)
   29.48 -val "XXXXX" = return_XXXXX;
   29.49 +val calling_code = return_XXXXX;
   29.50  
   29.51 -(* final test ... ----------------------------------------------------------------------------*)
   29.52 +(*=== complete model for step into (the above is optimised wrt. quick replacement fo XXXXX)*)
   29.53 +(** )val calling_code =( **)
   29.54 +(**)val return_XXXXX =(**)
   29.55 +  "call XXXXX";
   29.56 +\<close> ML \<open> (*//----------- step into XXXXX -----------------------------------------------------\\*)
   29.57 +(*//------------------ step into XXXXX -----------------------------------------------------\\*)
   29.58 +"~~~~~ fun XXXXX , args:"; val () = ();
   29.59 +\<close> ML \<open> (*||----------- contine.. XXXXX -------------------------------------------------------*)
   29.60 +(*||------------------ contine.. XXXXX -------------------------------------------------------*)
   29.61 +val return_XXXXX_STEP = 123
   29.62 +(*\\------------------ step into XXXXX -----------------------------------------------------//*)
   29.63 +\<close> ML \<open> (*\\----------- step into XXXXX -----------------------------------------------------//*)
   29.64 +val calling_code = return_XXXXX;
   29.65  
   29.66 -\<close> ML \<open>(*//############ @ {context} within fun XXXXX ----------------------------------\\*)
   29.67 -(*//################## @ {context} within fun XXXXX ---------------------------------------\\* )
   29.68 -(*-------------------- there must not be > ML < inbetween-------------------------------------*)
   29.69 -( *\\################# @ {context} within fun XXXXX ----------------------------------------//*)
   29.70 -\<close> ML \<open>(*\\############ @ {context} within fun XXXXX -----------------------------------//*)
   29.71 -
   29.72 -
   29.73 -\<close> ML \<open> (*//----------- inserted hidden code ------------------------------------------------\\*)
   29.74 -(*//------------------ inserted hidden code ------------------------------------------------\\*)
   29.75 -(*\\------------------ inserted hidden code ------------------------------------------------//*)
   29.76 -\<close> ML \<open> (*\\----------- inserted hidden code ------------------------------------------------//*)
   29.77 -
   29.78 +(*=== rules for step into:
   29.79 + * XXXXX = me_specify_step_by_tactic  ...i.e. include stucture id in identifiers
   29.80 + * val return_XXXXX_STEP = return_YYYYY
   29.81 +   ... indicates, that the value of a called function is also the value of the calling function
   29.82 + *)
   29.83  \<close> ML \<open>
   29.84  \<close>
   29.85  
   29.86 @@ -76,1374 +101,9 @@
   29.87  \<close> ML \<open>
   29.88  \<close>
   29.89  
   29.90 +(** )ML_file "Minisubpbl/100a-init-rootpbl-Maximum.sml"( **)
   29.91  section \<open>===================================================================================\<close>
   29.92 -section \<open>===== --- build fun item_to_add ---================================================\<close>
   29.93 -ML \<open>
   29.94 -\<close> ML \<open>
   29.95 -open Ctree;
   29.96 -open Pos;
   29.97 -open TermC;
   29.98 -open Istate;
   29.99 -open Tactic;
  29.100 -open I_Model;
  29.101 -open P_Model
  29.102 -open Rewrite;
  29.103 -open Step;
  29.104 -open LItool;
  29.105 -open LI;
  29.106 -open Test_Code
  29.107 -open Specify
  29.108 -open ME_Misc
  29.109 -open Pre_Conds;
  29.110 -\<close> ML \<open> (*//----------- build fun item_to_add -----------------------------------------------\\*)
  29.111 -(*//------------------ build fun item_to_add -----------------------------------------------\\*)
  29.112 -\<close> ML \<open> (*shift this block up in separate section a.s.a.p*)
  29.113 -\<close> ML \<open>
  29.114 -\<close> ML \<open>(*\<longrightarrow> model-def.sml*)
  29.115 -fun some_input (Cor_TEST _) = true
  29.116 -  | some_input (Inc_TEST (_, _::_)) = true
  29.117 -  | some_input (Syn_TEST _) = true
  29.118 -  | some_input _ = false
  29.119 -;
  29.120 -some_input: feedback_TEST -> bool
  29.121 -\<close> ML \<open>
  29.122 -(*OLD*)
  29.123 -fun cnt_corrects i_model = 
  29.124 -  fold (curry op +) (map (fn (_, _, _, _, (Cor_TEST _, _)) => 1 | _ => 0) i_model) 0;
  29.125 -(*---* )
  29.126 -fun cnt_correct i_model = 
  29.127 -  fold (curry op +) (map (fn (_, _, _, _, (feedb, _)) =>
  29.128 -    if some_input feedb then 1 else 0) i_model) 0;
  29.129 -( *NEW*)
  29.130 -\<close> ML \<open>(*\<longrightarrow> model-def.sml*)
  29.131 -fun arrange_args [] _ = []
  29.132 -  | arrange_args (sum :: ss) (cnt, all) = (sum, nth cnt all) :: (arrange_args ss (cnt + 1, all)) 
  29.133 -\<close> ML \<open>
  29.134 -\<close> ML \<open>(*\<longrightarrow> model-def.sml*)
  29.135 -(*OLD*)
  29.136 -(*---*)
  29.137 -fun max_variants o_model i_model =
  29.138 -  let
  29.139 -(*OLD*)
  29.140 -    val all_variants =
  29.141 -        map (fn (_, variants, _, _, _) => variants) i_model
  29.142 -        |> flat
  29.143 -        |> distinct op =
  29.144 -(*---* )
  29.145 -    val all_variants = (*we do not count empty items (not yet input)*)
  29.146 -        map (fn (_, _, _, _, (Inc_TEST (_, []), _)) => []
  29.147 -          | (_, variants, _, _, _) => variants) i_model
  29.148 -      |> flat
  29.149 -      |> distinct op =
  29.150 -( *NEW*)
  29.151 -    val variants_separated = map (filter_variants' i_model) all_variants
  29.152 -    val sums_corr = map (cnt_corrects) variants_separated
  29.153 -    val sum_variant_s = arrange_args sums_corr (1, all_variants)
  29.154 -
  29.155 -    val max_first = rev (sort (fn ((i, _), (j, _)) => int_ord (i, j)) sum_variant_s)
  29.156 -    val maxes = filter (fn (cnt, _) => curry op = (fst (hd max_first)) cnt) max_first
  29.157 -      |> map snd
  29.158 -  in
  29.159 -    if maxes = []
  29.160 -    then map (fn (_, variants, _, _, _) => variants) o_model
  29.161 -        |> flat
  29.162 -        |> distinct op =
  29.163 -    else maxes
  29.164 -  end
  29.165 -\<close> ML \<open> (*\<longrightarrow> model-def.sml*)
  29.166 -fun descriptor_exists descr feedb =
  29.167 -  case get_dscr' feedb of
  29.168 -    SOME descr' => descr' = descr
  29.169 -  | NONE => raise ERROR "existing_description NONE"
  29.170 -;
  29.171 -descriptor_exists: descriptor -> I_Model.feedback_TEST -> bool
  29.172 -\<close> ML \<open>
  29.173 -\<close> ML \<open> (*\<longrightarrow> i-model.sml*)
  29.174 -(*in item_to_add prefers items with incomplete lists *)
  29.175 -fun prior_to_select i_model =
  29.176 -  let
  29.177 -    (* ? problem with Const ("Input_Descript.solutions", _) ? *)
  29.178 -    val filt = (fn (_, _, _, _, (Inc_TEST (descr, _::_) , _)) => Model_Pattern.is_list_descr descr
  29.179 -      | _ => false)
  29.180 -  in
  29.181 -    (filter filt i_model) @ (filter_out filt i_model)
  29.182 -  end
  29.183 -;
  29.184 -prior_to_select: I_Model.T_TEST -> I_Model.T_TEST
  29.185 -\<close> ML \<open>
  29.186 -(*
  29.187 -  Select an item from o_model not yet input to i_model and add it to i_model.
  29.188 -  Prefer items with incomplete lists.
  29.189 -*)
  29.190 -fun item_to_add ctxt o_model i_model =
  29.191 -  let
  29.192 -    val m_field = "#Given"
  29.193 -    val term_as_string = "Constants [r = 7]"
  29.194 -  in
  29.195 -    SOME (m_field, term_as_string)
  29.196 -  end
  29.197 -\<close> ML \<open>
  29.198 -item_to_add: Proof.context -> O_Model.T -> Model_Pattern.T ->
  29.199 -    (Model_Def.m_field * TermC.as_string) option
  29.200 -\<close> ML \<open>
  29.201 -\<close> ML \<open>
  29.202 -(*\\------------------ build fun item_to_add -----------------------------------------------//*)
  29.203 -\<close> ML \<open> (*\\----------- build fun item_to_add -----------------------------------------------//*)
  29.204 -
  29.205 -\<close> ML \<open>
  29.206 -\<close>
  29.207 -
  29.208 -(*ML_file "Minisubpbl/100a-init-rootpbl-Maximum.sml"*)
  29.209 -section \<open>===================================================================================\<close>
  29.210 -section \<open>===== "Minisubpbl/100a-init-rootpbl-Maximum.sml" ==================================\<close>
  29.211 -ML \<open>
  29.212 -\<close> ML \<open>
  29.213 -(* Title:  "Minisubpbl/100a-init-rootpbl-Maximum.sml"
  29.214 -   Author: Walther Neuper 1105
  29.215 -   (c) copyright due to lincense terms.
  29.216 -
  29.217 -COMPARE Specify/specify.sml --- specify-phase: low level functions ---
  29.218 -
  29.219 -ATTENTION: the file creates buffer overflow if copied in one piece !
  29.220 -
  29.221 -Note: This test --- steps into me --- more than once, to a somewhat extreme extent;
  29.222 -  in order not to get lost while working in Test_Some etc, 
  29.223 -  re-introduce  ML (*--- step into XXXXX ---*) and Co.
  29.224 -  and use Sidekick for orientation.
  29.225 -  Nesting is indicated by  /---   //--   ///-  at the left margin of the comments.
  29.226 -*)
  29.227 -
  29.228 -open Ctree;
  29.229 -open Pos;
  29.230 -open TermC;
  29.231 -open Istate;
  29.232 -open Tactic;
  29.233 -open I_Model;
  29.234 -open P_Model
  29.235 -open Rewrite;
  29.236 -open Step;
  29.237 -open LItool;
  29.238 -open LI;
  29.239 -open Test_Code
  29.240 -open Specify
  29.241 -open ME_Misc
  29.242 -open Pre_Conds;
  29.243 -
  29.244 -val (_(*example text*),
  29.245 -  (model as ("Constants [r = (7::real)]" :: "Maximum A" :: "AdditionalValues [u, v]" :: 
  29.246 -     "Extremum (A = 2 * u * v - u \<up> 2)" :: 
  29.247 -     "SideConditions [((u::real) / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2]" :: 
  29.248 -     "SideConditions [((u::real) / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2]" :: 
  29.249 -     "SideConditions [(u::real) / 2 = r * sin \<alpha>, 2 / v = r * cos \<alpha>]" ::
  29.250 -(*---------------------------------------------,(v::real) / 2 = r * cos \<alpha>]" --- ERROR in example*)
  29.251 -     "FunctionVariable a" :: "FunctionVariable b" :: "FunctionVariable \<alpha>" :: 
  29.252 -     "Domain {0 <..< r}" :: "Domain {0 <..< r}" :: "Domain {0 <..< \<pi> / 2}" ::
  29.253 -     "ErrorBound (\<epsilon> = (0::real))" :: []), 
  29.254 -   refs as ("Diff_App", 
  29.255 -     ["univariate_calculus", "Optimisation"],
  29.256 -     ["Optimisation", "by_univariate_calculus"])))
  29.257 -  = Store.get (Know_Store.get_expls @{theory}) ["Diff_App-No.123a"] ["Diff_App-No.123a"];
  29.258 -
  29.259 -val c = [];
  29.260 -val return_init_calc = 
  29.261 - Test_Code.init_calc @{context} [(model, refs)]; (*val Model_Problem = nxt;*)
  29.262 -(*/------------------- step into init_calc -------------------------------------------------\\*)
  29.263 -"~~~~~ fun init_calc , args:"; val (ctxt, [(model, refs as (thy_id, _, _))]) =
  29.264 -  (@{context}, [(model, refs)]);
  29.265 -    val thy = thy_id |> ThyC.get_theory ctxt
  29.266 -    val ((pt, p), tacis) = Step_Specify.initialise' thy (model, refs)
  29.267 -	  val tac = case tacis of [] => Tactic.Empty_Tac | _ => (#1 o hd) tacis
  29.268 -	  val f = 
  29.269 -           TESTg_form ctxt (pt,p);
  29.270 -"~~~~~ fun TESTg_form , args:"; val (ctxt, ptp) = (ctxt, (pt,p));
  29.271 -    val (form, _, _) =
  29.272 -   ME_Misc.pt_extract ctxt ptp;
  29.273 -"~~~~~ fun pt_extract , args:"; val (ctxt, (pt, (p, p_ as Pbl(*Frm,Pbl*)))) = (ctxt, ptp);
  29.274 -        val ppobj = Ctree.get_obj I pt p
  29.275 -        val f = if Ctree.is_pblobj ppobj then pt_model ppobj p_ else Ctree.get_obj pt_form pt p;
  29.276 -            (*if*) Ctree.is_pblobj ppobj (*then*);
  29.277 -           pt_model ppobj p_ ;
  29.278 -"~~~~~ fun pt_model , args:"; val ((Ctree.PblObj {probl, spec, origin = (_, spec', hdl), ctxt, ...}), Pbl_) =
  29.279 -  (ppobj, p_);
  29.280 -      val (_, pI, _) = Ctree.get_somespec' spec spec';
  29.281 -(*    val where_ = if pI = Problem.id_empty then []*)
  29.282 -               (*if*) pI = Problem.id_empty (*else*);
  29.283 -	          val {where_rls, where_, model, ...} = Problem.from_store ctxt pI
  29.284 -	          val (_, where_) = 
  29.285 - Pre_Conds.check ctxt where_rls where_
  29.286 -              (model, I_Model.OLD_to_TEST probl);
  29.287 -"~~~~~ fun check , args:"; val (ctxt, where_rls, pres, (model_patt, i_model)) =
  29.288 -  (ctxt, where_rls, where_, (model, I_Model.OLD_to_TEST probl));
  29.289 -      val (env_model, (env_subst, env_eval)) = 
  29.290 -           make_environments model_patt i_model;
  29.291 -"~~~~~ fun make_environments , args:"; val (_, []) = (model_patt, i_model);
  29.292 -(*\------------------- step into init_calc -------------------------------------------------//*)
  29.293 -val (p,_,f,nxt,_,pt) = return_init_calc;
  29.294 -
  29.295 -(*+*)val PblObj {ctxt, probl, ...} = get_obj I pt [];
  29.296 -(*+*)Proof_Context.theory_of ctxt (*= {Pure, .., Diff_App}*);
  29.297 -(*+*)val Free ("r", Type ("Real.real", [])) = Syntax.read_term ctxt "r"
  29.298 -(*+*)val [] = probl
  29.299 -
  29.300 -val return_me_Model_Problem = 
  29.301 -           me nxt p c pt; val Add_Given "Constants [r = 7]" = #4 return_me_Model_Problem;
  29.302 -\<close> ML \<open>(*/------------- step into me_Model_Problem ------------------------------------------\\*)
  29.303 -(*/------------------- step into me_Model_Problem ------------------------------------------\\*)
  29.304 -"~~~~~ fun me , args:"; val (tac, (p:Pos.pos'), (_:Test_Code.NEW), (pt:Ctree.ctree)) = (nxt, p, c, pt);
  29.305 -      val ctxt = Ctree.get_ctxt pt p
  29.306 -val return_by_tactic = case
  29.307 -      Step.by_tactic tac (pt,p) of
  29.308 -		    ("ok", (_, _, ptp)) => ptp;
  29.309 -
  29.310 -(*//------------------ step into by_tactic -------------------------------------------------\\*)
  29.311 -"~~~~~ fun by_tactic , args:"; val (tac, (ptp as (pt, p))) = (tac, (pt,p));
  29.312 -val Applicable.Yes tac' = (*case*)
  29.313 -      Step.check tac (pt, p) (*of*);
  29.314 -(*+*)val Model_Problem' _ = tac';
  29.315 -"~~~~~ fun check , args:"; val (tac, (ctree, pos)) = (tac, (pt, p));
  29.316 -  (*if*) Tactic.for_specify tac (*then*);
  29.317 -
  29.318 -Specify_Step.check tac (ctree, pos);
  29.319 -"~~~~~ fun check , args:"; val (Tactic.Model_Problem, (pt, pos as (p, _))) =
  29.320 -  (tac, (ctree, pos));
  29.321 -        val (o_model, pI', ctxt) = case Ctree.get_obj I pt p of
  29.322 -          Ctree.PblObj {origin = (o_model, (_, pI', _), _), ctxt, ...} => (o_model, pI', ctxt)
  29.323 -	      val {model = model_patt, ...} = Problem.from_store (Ctree.get_ctxt pt pos) pI'
  29.324 -	      val pbl = I_Model.init_TEST o_model model_patt;
  29.325 -
  29.326 -val return_check =
  29.327 -    Applicable.Yes (Tactic.Model_Problem' (pI', I_Model.TEST_to_OLD pbl, []));
  29.328 -(*\\------------------ step into by_tactic -------------------------------------------------//*)
  29.329 -val (pt, p) = return_by_tactic;
  29.330 -
  29.331 -val return_do_next = (*case*)
  29.332 -      Step.do_next p ((pt, Pos.e_pos'), []) (*of*);
  29.333 -(*//------------------ step into do_next ---------------------------------------------------\\*)
  29.334 -"~~~~~ fun do_next , args:"; val (((ip as (_,p_)):pos'), ((ptp as (pt,p), tacis):Calc.state_pre)) =
  29.335 -  (p, ((pt, e_pos'),[]));
  29.336 -    val pIopt = get_pblID (pt,ip);
  29.337 -    (*if*) ip = ([],Res); (* = false*)
  29.338 -      val _ = (*case*) tacis (*of*);
  29.339 -      val SOME _ = (*case*) pIopt (*of*);
  29.340 -
  29.341 -    val ("ok", ([(Add_Given "Constants [r = 7]", _, _)], [], _)) =
  29.342 -      Step.switch_specify_solve p_ (pt, ip);
  29.343 -"~~~~~ fun switch_specify_solve , args:"; val (state_pos, (pt, input_pos)) = (p_, (pt, ip));
  29.344 -      (*if*) Pos.on_specification ([], state_pos) (*then*);
  29.345 -
  29.346 -    val ("ok", ([(Add_Given "Constants [r = 7]", _, _)], [], _)) =
  29.347 -      Step.specify_do_next (pt, input_pos);
  29.348 -(*///----------------- step into specify_do_next -------------------------------------------\\*)
  29.349 -"~~~~~ fun specify_do_next , args:"; val (ptp as (pt, (p, p_))) = (pt, input_pos);
  29.350 -
  29.351 -(*  val (_, (p_', tac)) =*)
  29.352 -val return_find_next_step = (*keep for continuing specify_do_next*)
  29.353 -   Specify.find_next_step ptp;
  29.354 -(*////---------------- step into find_next_step --------------------------------------------\\*)
  29.355 -"~~~~~ fun find_next_step , args:"; val ((pt, pos as (_, p_))) = (ptp);
  29.356 -    val {meth = met, origin = origin as (oris, o_refs as (_, pI', mI'), _), probl = pbl,
  29.357 -      spec = refs, ...} = Calc.specify_data (pt, pos);
  29.358 -    val ctxt = Ctree.get_ctxt pt pos;
  29.359 -      (*if*) Ctree.just_created (pt, pos) andalso origin <> Ctree.e_origin (*else*);
  29.360 -        (*if*) p_ = Pos.Pbl (*then*);
  29.361 -
  29.362 -\<close> ML \<open>
  29.363 -val return_for_problem as ("dummy", (Pbl, Add_Given "Constants [r = 7]")) =
  29.364 -   Specify.for_problem ctxt oris (o_refs, refs) (pbl, met);
  29.365 -\<close> ML \<open>
  29.366 -(*/////--------------- step into for_problem -----------------------------------------------\\*)
  29.367 -"~~~~~ fun for_problem , args:"; val (ctxt, oris, ((dI', pI', mI'), (dI, pI, mI)), (pbl, met))
  29.368 -  = (ctxt, oris, (o_refs, refs), (pbl, met));
  29.369 -    val cdI = if dI = ThyC.id_empty then dI' else dI;
  29.370 -    val cpI = if pI = Problem.id_empty then pI' else pI;
  29.371 -    val cmI = if mI = MethodC.id_empty then mI' else mI;
  29.372 -    val {model = pbt, where_rls, where_, ...} = Problem.from_store ctxt cpI;
  29.373 -    val {model = mpc, ...} = MethodC.from_store ctxt cmI;
  29.374 -
  29.375 -    val return_check =
  29.376 - Pre_Conds.check ctxt where_rls where_ (pbt, I_Model.OLD_to_TEST pbl);
  29.377 -(*//////-------------- step into check -------------------------------------------------\\*)
  29.378 -"~~~~~ fun check , args:"; val (ctxt, where_rls, pres, (model_patt, i_model)) =
  29.379 -  (ctxt, where_rls, where_, (pbt, I_Model.OLD_to_TEST pbl));
  29.380 -      val return_make_environments =
  29.381 -           make_environments model_patt i_model;
  29.382 -(*///// //------------ step into of_max_variant --------------------------------------------\\*)
  29.383 -"~~~~~ fun of_max_variant , args:"; val (model_patt, i_model) =
  29.384 -  (model_patt, i_model);
  29.385 -
  29.386 -(*+*)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))]"
  29.387 - = i_model |> I_Model.to_string_TEST @{context}
  29.388 -    val all_variants =
  29.389 -        map (fn (_, variants, _, _, _) => variants) i_model
  29.390 -        |> flat
  29.391 -        |> distinct op =
  29.392 -    val variants_separated = map (filter_variants' i_model) all_variants
  29.393 -    val sums_corr = map (Model_Def.cnt_corrects) variants_separated
  29.394 -    val sum_variant_s = Model_Def.arrange_args sums_corr (1, all_variants)
  29.395 -(*+*)val [(0, 1), (0, 2), (0, 3)] = sum_variant_s
  29.396 -    val (_, max_variant) = hd (*..crude decision, up to improvement *)
  29.397 -      (sort (fn ((i, _), (j, _)) => int_ord (i, j)) sum_variant_s)
  29.398 -    val i_model_max =
  29.399 -      filter (fn (_, variants, _ , _ ,_) => member (op =) variants max_variant) i_model
  29.400 -    val equal_descr_pairs = map (get_equal_descr i_model) model_patt |> flat
  29.401 -(*for building make_env_s -------------------------------------------------------------------\*)
  29.402 -(*!!!*) val ("#Given", (descr, term), pos) =
  29.403 -  Model_Pattern.split_descriptor ctxt ("#Given", @{term "Constants [r = (7::real)]"}, Position.none)
  29.404 -(*!!!*) val patt = equal_descr_pairs |> hd |> #1
  29.405 -(*!!!*)val equal_descr_pairs =
  29.406 -  (patt,
  29.407 -  (1, [1, 2, 3], true, "#Given", (Cor_TEST ((descr, (*!*)TermC.isalist2list(*!*) term)), pos)))
  29.408 -  :: tl equal_descr_pairs
  29.409 -(*for building make_env_s -------------------------------------------------------------------/*)
  29.410 -
  29.411 -    val env_model = make_env_model equal_descr_pairs;
  29.412 -(*///// ///----------- step into make_env_model --------------------------------------------\\*)
  29.413 -"~~~~~ fun make_env_model , args:"; val (equal_descr_pairs) = (equal_descr_pairs);
  29.414 -
  29.415 -val xxx = (fn ((_, (_, id)), (_, _, _, _, (feedb, _)))
  29.416 -       => (mk_env_model id feedb));
  29.417 -val ((_, (_, id)), (_, _, _, _, (feedb, _))) = nth 4 equal_descr_pairs;
  29.418 -(*\\\\\ \\\----------- step into make_env_model --------------------------------------------//*)
  29.419 -(*||||| ||------------ contine of_max_variant ------------------------------------------------*)
  29.420 -
  29.421 -    val equal_givens = filter (fn ((m_field, _), _) => m_field = "#Given") equal_descr_pairs
  29.422 -    val subst_eval_list = make_envs_preconds equal_givens
  29.423 -val return_make_envs_preconds =
  29.424 -           make_envs_preconds equal_givens;
  29.425 -(*///// ///----------- step into make_envs_preconds ----------------------------------------\\*)
  29.426 -"~~~~~ fun make_envs_preconds , args:"; val (equal_givens) = (equal_givens);
  29.427 -val xxx = (fn ((_, (_, id)), (_, _, _, _, (feedb, _))) => discern_feedback id feedb)
  29.428 -;
  29.429 -xxx: (Model_Pattern.single * I_Model.single_TEST) -> ((term * term) * (term * term)) list;
  29.430 -val return_discern_feedback =
  29.431 -           discern_feedback id feedb;
  29.432 -(*nth 1 equal_descr_pairs* )
  29.433 -"~~~~~ fun discern_feedback , args:"; val (id, (Model_Def.Cor_TEST ((descr, ts), _))) = (id, feedb);
  29.434 -( *nth 2 equal_descr_pairs*)
  29.435 -"~~~~~ fun discern_feedback , args:"; val (id, (Model_Def.Inc_TEST ((descr, ts)))) = (id, feedb);
  29.436 -
  29.437 -(*nth 1 equal_descr_pairs* )
  29.438 -(*+*)val [((Const ("fixes", typ1), Free ("r", typ2)),
  29.439 -           (Free ("r", typ3), value))] = return_discern_feedback
  29.440 -(*+*)val true = typ1 = typ2
  29.441 -(*+*)val true = typ3 = HOLogic.realT
  29.442 -(*+*)val "7" = UnparseC.term @{context} value
  29.443 -( *nth 2 equal_descr_pairs*)
  29.444 -(*+*)val [] = return_discern_feedback
  29.445 -
  29.446 -val return_discern_typ =
  29.447 -           discern_typ id (descr, ts);
  29.448 -"~~~~~ fun discern_typ , args:"; val (id, (descr, ts)) = (id, (descr, ts));
  29.449 -(*nth 1 equal_descr_pairs* )
  29.450 -(*+*)val [((Const ("fixes", typ1), Free ("r", typ2)),
  29.451 -           (Free ("r", typ3), value))] = return_discern_typ
  29.452 -(*+*)val true = typ1 = typ2
  29.453 -(*+*)val true = typ3 = HOLogic.realT
  29.454 -(*+*)val "7" = UnparseC.term @{context} value
  29.455 -( *nth 2 equal_descr_pairs*)
  29.456 -(*+*)val [] = return_discern_typ;
  29.457 -(**)
  29.458 -           switch_type id ts;
  29.459 -"~~~~~ fun switch_type , args:"; val (Const (descr_string, _), ts) = (descr, ts);
  29.460 -
  29.461 -(*nth 1 equal_descr_pairs* )
  29.462 -val return_switch_type_TEST = Const (descr_string, ts |> hd |> TermC.lhs |> type_of)
  29.463 -
  29.464 -(*+*)val Const ("Input_Descript.Constants", typ) = return_switch_type_TEST
  29.465 -(*+*)val Type ("Real.real", []) = typ
  29.466 -( *nth 2 equal_descr_pairs*)
  29.467 -(*+*)val return_switch_type_TEST = descr
  29.468 -(**)
  29.469 -(*\\\\\ \\\----------- step into make_envs_preconds ----------------------------------------//*)
  29.470 -(*||||| ||------------ contine of_max_variant ------------------------------------------------*)
  29.471 -    val subst_eval_list = make_envs_preconds equal_givens
  29.472 -    val (env_subst, env_eval) = split_list subst_eval_list
  29.473 -val make_environments = (i_model_max, env_model, (env_subst, env_eval)); (*GOON*)
  29.474 -(*\\\\\ \\------------ step into of_max_variant --------------------------------------------//*)
  29.475 -      val (i_model_max, env_model, (env_subst, env_eval)) = make_environments
  29.476 -(*!!!/----- we had a helpful argument for constructing env_model and (env_subst, env_eval)---\*)
  29.477 -      val (i_max_variant, env_model, (env_subst, env_eval)) = (i_model_max, [], ([], []))
  29.478 -(*!!!\----- we had a helpful argument for constructing env_model and (env_subst, env_eval)---/*) 
  29.479 -(*||||| |------------- contine check -----------------------------------------------------*)
  29.480 -      val pres_subst = map (TermC.subst_atomic_all env_subst) pres;
  29.481 -      val pres_subst_other = map (TermC.subst_atomic_all env_model) (map #2 pres_subst);
  29.482 -      val full_subst = if env_eval = [] then pres_subst_other
  29.483 -        else map (TermC.subst_atomic_all env_eval) (map #2 pres_subst_other)
  29.484 -      val evals = map (eval ctxt where_rls) full_subst
  29.485 -val return_ = (i_model_max, env_subst, env_eval)
  29.486 -(*\\\\\ \------------- step into check -----------------------------------------------------//*)
  29.487 -val (preok, _) = return_check;
  29.488 -
  29.489 -\<close> ML \<open>(*|||||--------- contine for_problem ---------------------------------------------------*)
  29.490 -(*|||||--------------- contine for_problem ---------------------------------------------------*)
  29.491 -val false =
  29.492 -    (*if*) dI' = ThyC.id_empty andalso dI = ThyC.id_empty (*else*);
  29.493 -val false =
  29.494 -      (*if*) pI' = Problem.id_empty andalso pI = Problem.id_empty (*else*);
  29.495 -val NONE =
  29.496 -     (*case*) find_first (I_Model.is_error o #5) pbl (*of*);
  29.497 -
  29.498 -\<close> ML \<open>
  29.499 -(**)val return_item_to_add =(**)
  29.500 -(** )val SOME (fd, ct') as ("#Given", "Constants [r = 7]") =( **)
  29.501 -  (*case*) item_to_add (ThyC.get_theory ctxt
  29.502 -            (if dI = ThyC.id_empty then dI' else dI)) oris pbt pbl (*of*);
  29.503 -\<close> ML \<open> (*///// /------ step into item_to_add -----------------------------------------------\\*)
  29.504 -(*///// /--------------- step into item_to_add -----------------------------------------------\\*)
  29.505 -"~~~~~ fun item_to_add , args:"; val (thy, oris, _, itms)
  29.506 -  = ((ThyC.get_theory ctxt (if dI = ThyC.id_empty then dI' else dI)), oris, pbt, pbl);
  29.507 -\<close> ML \<open>
  29.508 -(*+*)val "[\n(1, [\"1\", \"2\", \"3\"], #Given, Constants, [\"[r = 7]\"]), \n(2, [\"1\", \"2\", \"3\"], #Find, Maximum, [\"A\"]), \n(3, [\"1\", \"2\", \"3\"], #Find, AdditionalValues, [\"[u]\", \"[v]\"]), \n(4, [\"1\", \"2\", \"3\"], #Relate, Extremum, [\"A = 2 * u * v - u \<up> 2\"]), \n(5, [\"1\", \"2\"], #Relate, SideConditions, [\"[(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2]\"]), \n(6, [\"3\"], #Relate, SideConditions, [\"[u / 2 = r * sin \<alpha>]\", \"[2 / v = r * cos \<alpha>]\"]), \n(7, [\"1\"], #undef, FunctionVariable, [\"a\"]), \n(8, [\"2\"], #undef, FunctionVariable, [\"b\"]), \n(9, [\"3\"], #undef, FunctionVariable, [\"\<alpha>\"]), \n(10, [\"1\", \"2\"], #undef, Input_Descript.Domain, [\"{0<..<r}\"]), \n(11, [\"3\"], #undef, Input_Descript.Domain, [\"{0<..<\<pi> / 2}\"]), \n(12, [\"1\", \"2\", \"3\"], #undef, ErrorBound, [\"\<epsilon> = 0\"])]"
  29.509 - = oris |> O_Model.to_string @{context}
  29.510 -(*+*)val "[\"(#Given, (Constants, fixes))\", \"(#Find, (Maximum, maxx))\", \"(#Find, (AdditionalValues, vals))\", \"(#Relate, (Extremum, extr))\", \"(#Relate, (SideConditions, sideconds))\"]"
  29.511 - = pbt |> Model_Pattern.to_string @{context}
  29.512 -(*+*)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)]"
  29.513 - = itms |> I_Model.to_string @{context}
  29.514 -\<close> ML \<open>
  29.515 -\<close> ML \<open>
  29.516 -"~~~~~ fun item_to_add NEW, args:"; val (ctxt, o_model, i_model) =
  29.517 -  (@{context}, oris, I_Model.OLD_to_TEST itms)
  29.518 -\<close> ML \<open>
  29.519 -\<close> ML \<open>
  29.520 -\<close> ML \<open>
  29.521 -val return_item_to_add_step = SOME (I_Model.get_field_term thy ori (hd icl));
  29.522 -"~~~~~ fun item_to_add NEW, args:"; val (ctxt, o_model, i_model) =
  29.523 -  (@{context}, oris, I_Model.OLD_to_TEST itms);
  29.524 -"~~~~~ fun item_to_add NEW CODE BUILD, args:"; val (ctxt, o_model, i_model) =
  29.525 -  (@{context}, oris, I_Model.OLD_to_TEST 
  29.526 -    (Library.take 4 itms @
  29.527 -      [(5, [3], false, "#Relate", Inc ((@{term SideConditions},
  29.528 -        [@{term "(u::real) / 2 = r * sin \<alpha>"}]), (TermC.empty, []) ))]))
  29.529 -\<close> ML \<open>
  29.530 -(*+*)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, [3], false ,#Relate, (Inc_TEST SideConditions (u div 2 = r * sin \<alpha>) , pen2str, Position.T))]"
  29.531 - = i_model |> I_Model.to_string_TEST @{context}
  29.532 -\<close> ML \<open> (*//----------- build fun max_variants_TEST -----------------------------------------\\*)
  29.533 -(*//------------------ build fun max_variants_TEST -----------------------------------------\\*)
  29.534 -\<close> ML \<open>
  29.535 -      val all_variants as [3] =
  29.536 -          map (fn (_, _, _, _, (Inc_TEST (_, []), _)) => []
  29.537 -            | (_, variants, _, _, _) => variants) i_model
  29.538 -        |> flat
  29.539 -        |> distinct op =
  29.540 -\<close> ML \<open>
  29.541 -      val variants_separated = map (filter_variants' i_model) all_variants
  29.542 -\<close> ML \<open>
  29.543 -(*+*)length variants_separated
  29.544 -\<close> ML \<open>
  29.545 -\<close> ML \<open>
  29.546 -      val sums_corr as [1] = map (Model_Def.cnt_corrects) variants_separated
  29.547 -\<close> ML \<open>
  29.548 -      val sum_variant_s as [(1, 3)] = arrange_args sums_corr (1, all_variants)
  29.549 -\<close> ML \<open>
  29.550 -      val max_first as [(1, 3)] = rev (sort (fn ((i, _), (j, _)) => int_ord (i, j)) sum_variant_s)
  29.551 -\<close> ML \<open>
  29.552 -      val maxes as [3] = filter (fn (cnt, _) => curry op = (fst (hd max_first)) cnt) max_first
  29.553 -        |> map snd
  29.554 -\<close> ML \<open>
  29.555 -val return_max_variants = maxes
  29.556 -\<close> ML \<open>
  29.557 -(*\\------------------ build fun max_variants_TEST -----------------------------------------//*)
  29.558 -\<close> ML \<open> (*\\----------- build fun max_variants_TEST -----------------------------------------//*)
  29.559 -\<close> ML \<open>
  29.560 -\<close> ML \<open>(*for that --vvvvvv--- reason we probably need a new max_variants_TEST ---^^^^^*)
  29.561 -    val max_vnt as 3 = last_elem ((*Model_Def.*)max_variants_TEST o_model i_model)
  29.562 -\<close> ML \<open>
  29.563 -    val o_vnts = filter (fn (_, vnts, _, _, _) => member op= vnts max_vnt) o_model
  29.564 -\<close> ML \<open>
  29.565 -    val i_to_select = i_model
  29.566 -      |> filter_out (fn (_, vnts, _, _, (Cor_TEST _, _)) => member op= vnts max_vnt | _ => false)
  29.567 -      |> prior_to_select
  29.568 -      |> hd
  29.569 -\<close> ML \<open>
  29.570 -get_dscr';
  29.571 -ori_2itm: feedback -> descriptor -> Model_Def.values -> O_Model.single -> I_Model.single;
  29.572 -\<close> text \<open>
  29.573 -val (max_vnt, descr, ts) = (3, @{term SideConditions}, [@{term "(u::real) / 2 = r * sin \<alpha>"}])
  29.574 -(*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*)
  29.575 -\<close> ML \<open>
  29.576 -"~~~~~ fun fill_from_o , args:"; val (o_model, (i, vnts, bool, m_field, (feedb, pos))) = 
  29.577 -  (o_vnts, (*i_to_select*) (1, [1, 2, 3], false, "#Given", (Inc_TEST (descr, ts), Position.none)));
  29.578 -\<close> ML \<open>
  29.579 -    val all_values =
  29.580 -      case find_first (fn (_, _, _, descr', _) => descriptor_exists descr' feedb) o_model of
  29.581 -        SOME (_, _, _, _, ts) => ts
  29.582 -      | NONE => raise ERROR "xxxxx"
  29.583 -\<close> ML \<open>
  29.584 -(*+*)val xxx = all_values |> UnparseC.terms @{context}
  29.585 -\<close> text \<open>
  29.586 -      if Model_Pattern.is_list_descr descr
  29.587 -      then
  29.588 -        let
  29.589 -          val miss = subtract op= (I_Model.values_TEST feedb) (*TODO*)
  29.590 -        in 
  29.591 -         []
  29.592 -        end
  29.593 -      else all_values
  29.594 -\<close> ML \<open>
  29.595 -\<close> ML \<open>
  29.596 -\<close> ML \<open>
  29.597 -\<close> ML \<open> (*if Model_Pattern.is_list_descr*)
  29.598 -val (o_ts, i_ts) = ([1,2,3], [2,3])
  29.599 -\<close> ML \<open>
  29.600 -    val miss = subtract op= i_ts o_ts
  29.601 -\<close> ML \<open>
  29.602 -\<close> ML \<open>
  29.603 -\<close> ML \<open>
  29.604 -\<close> ML \<open>
  29.605 -\<close> ML \<open>
  29.606 -(*o_model contains appropriate variants only. Observe inclomplete lists *)
  29.607 -fun fill_from_o o_model (i, vnts, bool, m_field, (feedb, pos)) =
  29.608 -  let
  29.609 -    val all_ts =
  29.610 -      case find_first (fn (_, _, _, descr', _) => descr' = (*feedb*) descr) o_model of
  29.611 -        SOME (_, _, _, _, ts) => ts
  29.612 -      | NONE => raise ERROR "xxxxx"
  29.613 -  in
  29.614 -    123
  29.615 -  end
  29.616 -\<close> ML \<open>
  29.617 -\<close> ML \<open> (*----------^^^ new code --------------------------------------------------------------*)
  29.618 -\<close> ML \<open>
  29.619 -(*+*)val SOME ("#Given", "Constants [r = 7]") = return_item_to_add_step
  29.620 -val true = return_item_to_add_step = return_item_to_add
  29.621 -(*\\\\\ \------------- step into item_to_add -----------------------------------------------//*)
  29.622 -\<close> ML \<open> (*\\\\\ \------ step into item_to_add -----------------------------------------------//*)
  29.623 -val SOME (fd, ct') = return_item_to_add
  29.624 -
  29.625 -\<close> ML \<open>(*|||||--------- continue.. for_problem ------------------------------------------------*)
  29.626 -(*|||||--------------- continue.. for_problem ------------------------------------------------*)
  29.627 -val return_for_problem_step as ("dummy", (Pbl, Add_Given "Constants [r = 7]"))
  29.628 -  = ("dummy", (Pos.Pbl, P_Model.mk_additem fd ct'))
  29.629 -(** )return_for_problem_step = return_for_problem( *..would require equality types*)
  29.630 -\<close> ML \<open>(*\\\\\--------- step into for_problem -----------------------------------------------//*)
  29.631 -(*\\\\\--------------- step into for_problem -----------------------------------------------//*)
  29.632 -val return_find_next_step = return_for_problem
  29.633 -\<close> ML \<open>(*\\\\---------- step into find_next_step --------------------------------------------//*)
  29.634 -(*\\\\---------------- step into find_next_step --------------------------------------------//*)
  29.635 -(*|||----------------- continuing specify_do_next --------------------------------------------*)
  29.636 -val (_, (p_', tac)) = return_find_next_step (*kept for continuing specify_do_next*)
  29.637 -
  29.638 -    val ist_ctxt =  Ctree.get_loc pt (p, p_)
  29.639 -(*+*)val Add_Given "Constants [r = 7]" = tac
  29.640 -val _ =
  29.641 -    (*case*) tac (*of*);
  29.642 -
  29.643 -Step_Specify.by_tactic_input tac (pt, (p, p_'));
  29.644 -"~~~~~ fun by_tactic_input , args:"; val ((Tactic.Add_Given ct), ptp) =
  29.645 -  (tac, (pt, (p, p_')));
  29.646 -
  29.647 -   Specify.by_Add_ "#Given" ct ptp;
  29.648 -"~~~~~ fun by_Add_ , args:"; val (m_field, ct ,(pt, pos as (_, p_))) =
  29.649 -  ("#Given", ct, ptp);
  29.650 -    val (met, oris, (_, pI', mI'), pbl, (_, pI, mI), ctxt) = SpecificationC.get_data (pt, pos)
  29.651 -    val (i_model, m_patt) =
  29.652 -       if p_ = Pos.Met then
  29.653 -         (met,
  29.654 -           (if mI = MethodC.id_empty then mI' else mI) |> MethodC.from_store ctxt |> #model)
  29.655 -       else
  29.656 -         (pbl,
  29.657 -           (if pI = Problem.id_empty then pI' else pI) |> Problem.from_store ctxt |> #model);
  29.658 -
  29.659 -      (*case*)
  29.660 -   I_Model.check_single ctxt m_field oris i_model m_patt ct (*of*);
  29.661 -"~~~~~ fun check_single , args:"; val (ctxt, m_field, o_model, i_model, m_patt, (str(*, pos*))) =
  29.662 -  (ctxt, m_field, oris, i_model, m_patt, ct);
  29.663 -        val (t as (descriptor $ _)) = Syntax.read_term ctxt str
  29.664 -
  29.665 -(*+*)val "Constants [r = 7]" = UnparseC.term @{context} t;
  29.666 -
  29.667 -        val SOME m_field' =
  29.668 -          (*case*) Model_Pattern.get_field descriptor m_patt (*of*);
  29.669 -           (*if*) m_field <> m_field' (*else*);
  29.670 -
  29.671 -(*+*)val "#Given" = m_field; val "#Given" = m_field'
  29.672 -
  29.673 -val ("", ori', all) =
  29.674 -          (*case*) O_Model.contains ctxt m_field o_model t (*of*);
  29.675 -
  29.676 -(*+*)val (_, _, _, _, vals) = hd o_model;
  29.677 -(*+*)val "Constants [r = 7]" = UnparseC.term @{context} (@{term Constants} $ (hd vals));
  29.678 -(*+*)if "[\n(1, [\"1\", \"2\", \"3\"], #Given, Constants, [\"[r = 7]\"]), " ^ 
  29.679 -(*+*)    "\n(2, [\"1\", \"2\", \"3\"], #Find, Maximum, [\"A\"]), " ^ 
  29.680 -(*+*)    "\n(3, [\"1\", \"2\", \"3\"], #Find, AdditionalValues, [\"[u]\", \"[v]\"]), " ^ 
  29.681 -(*+*)    "\n(4, [\"1\", \"2\", \"3\"], #Relate, Extremum, [\"A = 2 * u * v - u \<up> 2\"]), " ^ 
  29.682 -(*+*)    "\n(5, [\"1\", \"2\"], #Relate, SideConditions, [\"[(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2]\"]), " ^ 
  29.683 -(*+*)    "\n(6, [\"3\"], #Relate, SideConditions, [\"[u / 2 = r * sin \<alpha>]\", \"[2 / v = r * cos \<alpha>]\"]), " ^ 
  29.684 -(*+*)    "\n(7, [\"1\"], #undef, FunctionVariable, [\"a\"]), " ^ 
  29.685 -(*+*)    "\n(8, [\"2\"], #undef, FunctionVariable, [\"b\"]), \n(9, [\"3\"], #undef, FunctionVariable, [\"\<alpha>\"]), " ^ 
  29.686 -(*+*)    "\n(10, [\"1\", \"2\"], #undef, Input_Descript.Domain, [\"{0<..<r}\"]), " ^ 
  29.687 -(*+*)    "\n(11, [\"3\"], #undef, Input_Descript.Domain, [\"{0<..<\<pi> / 2}\"]), " ^ 
  29.688 -(*+*)    "\n(12, [\"1\", \"2\", \"3\"], #undef, ErrorBound, [\"\<epsilon> = 0\"])]"
  29.689 -(*+*)= O_Model.to_string @{context} o_model then () else error "o_model CHANGED";
  29.690 -
  29.691 -  (*case*) is_notyet_input ctxt i_model all ori' m_patt (*of*);
  29.692 -"~~~~~ fun is_notyet_input , args:"; val (ctxt, itms, all, (i, v, f, d, ts), pbt) =
  29.693 -  (ctxt, i_model, all, ori', m_patt);
  29.694 -val SOME (_, (_, pid)) =
  29.695 -  (*case*) find_first (eq1 d) pbt (*of*);
  29.696 -(*local*)fun eq3 f d (_, _, _, f', itm_) = f = f' andalso d = (I_Model.descriptor itm_);(*local*)
  29.697 -val SOME (_, _, _, _, itm_) =
  29.698 -    (*case*) find_first (eq3 f d) itms (*of*);
  29.699 -val ts' = inter op = (o_model_values itm_) ts;
  29.700 -            (*if*) subset op = (ts, ts') (*else*);
  29.701 -val return_is_notyet_input = ("", 
  29.702 -           ori_2itm itm_ pid all (i, v, f, d, subtract op = ts' ts));
  29.703 -"~~~~~ fun ori_2itm , args:"; val (itm_, pid, all, (id, vt, fd, d, ts)) =
  29.704 -  (itm_, pid, all, (i, v, f, d, subtract op = ts' ts));
  29.705 -    val ts' = union op = (o_model_values itm_) ts;
  29.706 -    val pval = [Input_Descript.join'''' (d, ts')]
  29.707 -    val complete = if eq_set op = (ts', all) then true else false
  29.708 -
  29.709 -(*+*)val "Inc Constants [] , pen2str" = itm_ |> I_Model.feedback_to_string @{context}
  29.710 -(*\\\----------------- step into specify_do_next -------------------------------------------//*)
  29.711 -(*\\------------------ step into do_next ---------------------------------------------------//*)
  29.712 -val ("ok", (ts as (_, _, _) :: _, _, (pt, p))) = return_do_next
  29.713 -
  29.714 -(*|------------------- continue with me_Model_Problem ----------------------------------------*)
  29.715 -
  29.716 -val tacis as (_::_) =
  29.717 -        (*case*) ts (*of*);
  29.718 -          val (tac, _, _) = last_elem tacis
  29.719 -
  29.720 -val return_Model_Problem = (p, [] : NEW, TESTg_form ctxt (pt, p), tac, Celem.Sundef, pt);
  29.721 -(*//------------------ step into TESTg_form ------------------------------------------------\\*)
  29.722 -"~~~~~ fun TESTg_form , args:"; val (ctxt, ptp) = (ctxt, (pt, p));
  29.723 -
  29.724 -    val (form, _, _) =
  29.725 -   ME_Misc.pt_extract ctxt ptp;
  29.726 -"~~~~~ fun pt_extract , args:"; val (ctxt, (pt, (p, p_(*Frm,Pbl*)))) = (ctxt, ptp);
  29.727 -        val ppobj = Ctree.get_obj I pt p
  29.728 -        val f = if Ctree.is_pblobj ppobj then pt_model ppobj p_ else Ctree.get_obj pt_form pt p;
  29.729 -          (*if*) Ctree.is_pblobj ppobj (*then*);
  29.730 -
  29.731 -           pt_model ppobj p_;
  29.732 -"~~~~~ fun pt_model , args:"; val ((Ctree.PblObj {probl, spec, origin = (_, o_spec, hdl), ctxt, ...}), 
  29.733 -  Pbl(*Frm,Pbl*)) = (ppobj, p_);
  29.734 -      val (_, _, met_id) = References.select_input o_spec spec
  29.735 -      val (allcorr, _) = Pre_Conds.check_internal ctxt (I_Model.OLD_to_TEST probl) (Pos.Met, met_id)
  29.736 -val return_pt_model = Ctree.ModSpec (allcorr, Pos.Pbl, hdl, probl, (*where_*)[(*Problem.from_store in check*)], spec)
  29.737 -
  29.738 -(*|------------------- continue with TESTg_form ----------------------------------------------*)
  29.739 -val Ctree.ModSpec (spec as (_, p_, _, gfr, where_, _)) =
  29.740 -    (*case*) form (*of*);
  29.741 -    Test_Out.PpcKF (  (Test_Out.Problem [],
  29.742 - 			P_Model.from (Proof_Context.theory_of ctxt) gfr where_));
  29.743 -
  29.744 -\<close> ML \<open>
  29.745 -   P_Model.from (Proof_Context.theory_of ctxt) gfr where_;
  29.746 -"~~~~~ fun from , args:"; val (thy, itms, where_) = ((Proof_Context.theory_of ctxt), gfr, where_);
  29.747 -    fun coll model [] = model
  29.748 -      | coll model ((_, _, _, field, itm_) :: itms) =
  29.749 -        coll (add_sel_ppc thy field model (item_from_feedback thy itm_)) itms;
  29.750 -
  29.751 - val gfr = coll P_Model.empty itms;
  29.752 -"~~~~~ fun coll , args:"; val (model, ((aaa, bbb_,ccc_, field, itm_) :: itms))
  29.753 -  = (P_Model.empty, itms);
  29.754 -
  29.755 -(*+*)val 4 = length itms;
  29.756 -(*+*)val itm = nth 1 itms;
  29.757 -
  29.758 -           coll P_Model.empty [itm];
  29.759 -"~~~~~ fun coll , iterate:"; val (model, ((aaa, bbb_,ccc_, field, itm_) :: []))
  29.760 -  = (P_Model.empty, [itm]);
  29.761 -
  29.762 -          (add_sel_ppc thy field model (item_from_feedback thy itm_));
  29.763 -"~~~~~ fun add_sel_ppc , args:"; val ((_: theory), sel, {Given = gi, Where = wh, Find = fi, With = wi, Relate = re}, x )
  29.764 -  = (thy, field, model, (item_from_feedback thy itm_));
  29.765 -
  29.766 -   P_Model.item_from_feedback thy itm_;
  29.767 -"~~~~~ fun item_from_feedback , args:"; val (thy, (I_Model.Inc ((d, ts), _))) = (thy, itm_);
  29.768 -   P_Model.Incompl (UnparseC.term_in_thy thy (Input_Descript.join (d, ts)));
  29.769 -(*\\------------------ step into TESTg_form ------------------------------------------------//*)
  29.770 -\<close> ML \<open>(*\------------- step into me_Model_Problem ------------------------------------------//*)
  29.771 -(*\------------------- step into me_Model_Problem ------------------------------------------//*)
  29.772 -val (p, _, f, nxt, _, pt) = return_me_Model_Problem
  29.773 -
  29.774 -(*-------------------- contine me's ----------------------------------------------------------*)
  29.775 -val return_me_add_find_Constants = me nxt p c pt;
  29.776 -                                      val Add_Find "Maximum A" = #4 return_me_add_find_Constants;
  29.777 -(*/------------------- step into me_add_find_Constants -------------------------------------\\*)
  29.778 -
  29.779 -\<close> ML \<open>
  29.780 -\<close>
  29.781 -
  29.782 -(*ML_file "Minisubpbl/150a-add-given-Maximum.sml"*)
  29.783 -section \<open>===================================================================================\<close>
  29.784 -section \<open>===== "Minisubpbl/150a-add-given-Maximum.sml"  ====================================\<close>
  29.785 -ML \<open>
  29.786 -\<close> ML \<open>
  29.787 -(* Title:  "Minisubpbl/150a-add-given-Maximum.sml"
  29.788 -   Author: Walther Neuper 1105
  29.789 -   (c) copyright due to lincense terms.
  29.790 -
  29.791 -COMPARE Specify/specify.sml --- specify-phase: low level functions ---
  29.792 -
  29.793 -ATTENTION: the file creates buffer overflow if copied in one piece !
  29.794 -
  29.795 -Note: This test --- steps into me --- more than once, to a somewhat extreme extent;
  29.796 -  in order not to get lost while working in Test_Some etc, 
  29.797 -  re-introduce  ML (*--- step into XXXXX ---*) and Co.
  29.798 -  and use Sidekick for orientation.
  29.799 -  Nesting is indicated by  /---   //--   ///-  at the left margin of the comments.
  29.800 -*)
  29.801 -
  29.802 -open Ctree;
  29.803 -open Pos;
  29.804 -open TermC;
  29.805 -open Istate;
  29.806 -open Tactic;
  29.807 -open I_Model;
  29.808 -open P_Model
  29.809 -open Rewrite;
  29.810 -open Step;
  29.811 -open LItool;
  29.812 -open LI;
  29.813 -open Test_Code
  29.814 -open Specify
  29.815 -open ME_Misc
  29.816 -open Pre_Conds;
  29.817 -
  29.818 -val (_(*example text*),
  29.819 -  (model as ("Constants [r = (7::real)]" :: "Maximum A" :: "AdditionalValues [u, v]" :: 
  29.820 -     "Extremum (A = 2 * u * v - u \<up> 2)" :: 
  29.821 -     "SideConditions [((u::real) / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2]" :: 
  29.822 -     "SideConditions [((u::real) / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2]" :: 
  29.823 -     "SideConditions [(u::real) / 2 = r * sin \<alpha>, 2 / v = r * cos \<alpha>]" ::
  29.824 -(*---------------------------------------------,(v::real) / 2 = r * cos \<alpha>]" --- ERROR in example*)
  29.825 -     "FunctionVariable a" :: "FunctionVariable b" :: "FunctionVariable \<alpha>" :: 
  29.826 -     "Domain {0 <..< r}" :: "Domain {0 <..< r}" :: "Domain {0 <..< \<pi> / 2}" ::
  29.827 -     "ErrorBound (\<epsilon> = (0::real))" :: []), 
  29.828 -   refs as ("Diff_App", 
  29.829 -     ["univariate_calculus", "Optimisation"],
  29.830 -     ["Optimisation", "by_univariate_calculus"])))
  29.831 -  = Store.get (Know_Store.get_expls @{theory}) ["Diff_App-No.123a"] ["Diff_App-No.123a"];
  29.832 -
  29.833 -val c = [];
  29.834 -val return_init_calc = 
  29.835 - Test_Code.init_calc @{context} [(model, refs)]; (*val Model_Problem = nxt;*)
  29.836 -(*/------------------- step into init_calc -------------------------------------------------\\*)
  29.837 -"~~~~~ fun init_calc , args:"; val (ctxt, [(model, refs as (thy_id, _, _))]) =
  29.838 -  (@{context}, [(model, refs)]);
  29.839 -    val thy = thy_id |> ThyC.get_theory ctxt
  29.840 -    val ((pt, p), tacis) = Step_Specify.initialise' thy (model, refs)
  29.841 -	  val tac = case tacis of [] => Tactic.Empty_Tac | _ => (#1 o hd) tacis
  29.842 -	  val f = 
  29.843 -           TESTg_form ctxt (pt,p);
  29.844 -"~~~~~ fun TESTg_form , args:"; val (ctxt, ptp) = (ctxt, (pt,p));
  29.845 -    val (form, _, _) =
  29.846 -   ME_Misc.pt_extract ctxt ptp;
  29.847 -"~~~~~ fun pt_extract , args:"; val (ctxt, (pt, (p, p_ as Pbl(*Frm,Pbl*)))) = (ctxt, ptp);
  29.848 -        val ppobj = Ctree.get_obj I pt p
  29.849 -        val f = if Ctree.is_pblobj ppobj then pt_model ppobj p_ else Ctree.get_obj pt_form pt p;
  29.850 -            (*if*) Ctree.is_pblobj ppobj (*then*);
  29.851 -           pt_model ppobj p_ ;
  29.852 -"~~~~~ fun pt_model , args:"; val ((Ctree.PblObj {probl, spec, origin = (_, spec', hdl), ctxt, ...}), Pbl_) =
  29.853 -  (ppobj, p_);
  29.854 -      val (_, pI, _) = Ctree.get_somespec' spec spec';
  29.855 -(*    val where_ = if pI = Problem.id_empty then []*)
  29.856 -               (*if*) pI = Problem.id_empty (*else*);
  29.857 -	          val {where_rls, where_, model, ...} = Problem.from_store ctxt pI
  29.858 -	          val (_, where_) = 
  29.859 - Pre_Conds.check ctxt where_rls where_
  29.860 -              (model, I_Model.OLD_to_TEST probl);
  29.861 -"~~~~~ fun check , args:"; val (ctxt, where_rls, pres, (model_patt, i_model)) =
  29.862 -  (ctxt, where_rls, where_, (model, I_Model.OLD_to_TEST probl));
  29.863 -      val (env_model, (env_subst, env_eval)) = 
  29.864 -           make_environments model_patt i_model;
  29.865 -"~~~~~ fun make_environments , args:"; val (_, []) = (model_patt, i_model);
  29.866 -(*\------------------- step into init_calc -------------------------------------------------//*)
  29.867 -val (p,_,f,nxt,_,pt) = return_init_calc;
  29.868 -
  29.869 -(*+*)val PblObj {ctxt, probl, ...} = get_obj I pt [];
  29.870 -(*+*)Proof_Context.theory_of ctxt (*= {Pure, .., Diff_App}*);
  29.871 -(*+*)val Free ("r", Type ("Real.real", [])) = Syntax.read_term ctxt "r"
  29.872 -(*+*)val [] = probl
  29.873 -
  29.874 -val (p, _, f, nxt, _, pt) = me nxt p c pt; val Add_Given "Constants [r = 7]" = #4 return_me_Model_Problem;
  29.875 -val return_me_add_find_Constants
  29.876 -                          = me nxt p c pt; val Add_Find "Maximum A" = #4 return_me_add_find_Constants;
  29.877 -\<close> ML \<open>
  29.878 -(*/------------------- step into me_add_find_Constants -------------------------------------\\*)
  29.879 -"~~~~~ fun me , args:"; val (tac as Add_Given "Constants [r = 7]", p, _(*NEW remove*), pt) =
  29.880 -  (nxt, p, c, pt);
  29.881 -      val ctxt = Ctree.get_ctxt pt p
  29.882 -(*+*)val PblObj {probl = (1, [1, 2, 3], false, "#Given", Inc 
  29.883 -    ((Const ("Input_Descript.Constants", _), []), _)) :: _, ...}  = get_obj I pt (fst p)
  29.884 -(*-------------------------------------------^^--*)
  29.885 -val return_step_by_tactic = (*case*) 
  29.886 -      Step.by_tactic tac (pt, p) (*of*);
  29.887 -(*//------------------ step into Step.by_tactic --------------------------------------------\\*)
  29.888 -"~~~~~ fun by_tactic , args:"; val (tac, (ptp as (pt, p))) = (tac, (pt, p));
  29.889 -val Applicable.Yes tac' =
  29.890 -    (*case*) Specify_Step.check tac (pt, p) (*of*);
  29.891 -	    (*if*) Tactic.for_specify' tac' (*then*);
  29.892 -Step_Specify.by_tactic tac' ptp;
  29.893 -"~~~~~ fun by_tactic , args:"; val ((Tactic.Add_Given' (ct, _)), (pt, p)) = (tac', ptp);
  29.894 -
  29.895 -   Specify.by_Add_ "#Given" ct (pt, p);
  29.896 -"~~~~~ fun by_Add_ , args:"; val (m_field, ct, (pt, pos as (_, p_))) = ("#Given", ct, (pt, p));
  29.897 -    val (met, oris, (_, pI', mI'), pbl, (_, pI, mI), ctxt) = SpecificationC.get_data (pt, pos);
  29.898 -
  29.899 -val false =
  29.900 -       (*if*) p_ = Pos.Met (*else*);
  29.901 -val (i_model, m_patt) =
  29.902 -         (pbl,
  29.903 -           (if pI = Problem.id_empty then pI' else pI) |> Problem.from_store ctxt |> #model)
  29.904 -val I_Model.Add i_single =
  29.905 -      (*case*) I_Model.check_single ctxt m_field oris i_model m_patt ct (*of*);
  29.906 -
  29.907 -	          val i_model' =
  29.908 -   I_Model.add_single (Proof_Context.theory_of ctxt) i_single i_model;
  29.909 -"~~~~~ fun add_single , args:"; val (thy, itm, model) =
  29.910 -  ((Proof_Context.theory_of ctxt), i_single, i_model);
  29.911 -    fun eq_untouched d (0, _, _, _, itm_) = (d = I_Model.descriptor itm_)
  29.912 -      | eq_untouched _ _ = false
  29.913 -    val model' = case I_Model.seek_ppc (#1 itm) model of
  29.914 -      SOME _ => overwrite_ppc thy itm model (*itm updated in is_notyet_input WN.11.03*)
  29.915 -
  29.916 -(*||------------------ contine Step.by_tactic ------------------------------------------------*)
  29.917 -(*\\------------------ step into Step.by_tactic --------------------------------------------//*)
  29.918 -val ("ok", (_, _, ptp)) = return_step_by_tactic;
  29.919 -
  29.920 -      val (pt, p) = ptp;
  29.921 -        (*case*) 
  29.922 -      Step.do_next p ((pt, Pos.e_pos'), []) (*of*);
  29.923 -"~~~~~ fun do_next , args:"; val ((ip as (_, p_)), (ptp as (pt, p), tacis)) =
  29.924 -  (p, ((pt, Pos.e_pos'), []));
  29.925 -  (*if*) Pos.on_calc_end ip (*else*);
  29.926 -      val (_, probl_id, _) = Calc.references (pt, p);
  29.927 -val _ =
  29.928 -      (*case*) tacis (*of*);
  29.929 -        (*if*) probl_id = Problem.id_empty (*else*);
  29.930 -
  29.931 -           switch_specify_solve p_ (pt, ip);
  29.932 -"~~~~~ fun switch_specify_solve , args:"; val (state_pos, (pt, input_pos)) = (p_, (pt, ip));
  29.933 -      (*if*) Pos.on_specification ([], state_pos) (*then*);
  29.934 -
  29.935 -           specify_do_next (pt, input_pos);
  29.936 -"~~~~~ fun specify_do_next , args:"; val (ptp as (pt, (p, p_))) = (pt, input_pos);
  29.937 -    val (_, (p_', tac)) =
  29.938 -   Specify.find_next_step ptp;
  29.939 -"~~~~~ fun find_next_step , args:"; val (pt, pos as (_, p_)) = (ptp);
  29.940 -    val {meth = met, origin = origin as (oris, o_refs as (_, pI', mI'), _), probl = pbl,
  29.941 -      spec = refs, ...} = Calc.specify_data (pt, pos);
  29.942 -    val ctxt = Ctree.get_ctxt pt pos;
  29.943 -
  29.944 -(*+*)val (1, [1, 2, 3], true, "#Given", Cor ((Const ("Input_Descript.Constants", _), ts ), _)) :: _
  29.945 -  = pbl
  29.946 -(*+*)val "[[r = 7]]" = UnparseC.terms @{context} ts;
  29.947 -(*-----ML-^------^-HOL*)
  29.948 -
  29.949 -      (*if*) Ctree.just_created (pt, pos) andalso origin <> Ctree.e_origin (*else*); 
  29.950 -        (*if*) p_ = Pos.Pbl (*then*); 
  29.951 -
  29.952 -           for_problem ctxt oris (o_refs, refs) (pbl, met);
  29.953 -"~~~~~ fun for_problem , args:"; val (ctxt, oris, ((dI', pI', mI'), (dI, pI, mI)), (pbl, met)) =
  29.954 -  (ctxt, oris, (o_refs, refs), (pbl, met));
  29.955 -    val cpI = if pI = Problem.id_empty then pI' else pI;
  29.956 -    val cmI = if mI = MethodC.id_empty then mI' else mI;
  29.957 -    val {model = pbt, where_rls, where_, ...} = Problem.from_store ctxt cpI;
  29.958 -    val {model = mpc, ...} = MethodC.from_store ctxt cmI
  29.959 -
  29.960 -    val (preok, _) =
  29.961 -Pre_Conds.check ctxt where_rls where_ (pbt, I_Model.OLD_to_TEST pbl);
  29.962 -"~~~~~ fun check , args:"; val (ctxt, where_rls, pres, (model_patt, i_model)) =
  29.963 -  (ctxt, where_rls, where_, (pbt, I_Model.OLD_to_TEST pbl));
  29.964 -
  29.965 -      val (_, (env_subst, env_eval)) = Pre_Conds.make_environments model_patt i_model;
  29.966 -"~~~~~ fun of_max_variant , args:"; val (model_patt, i_model) = (model_patt, i_model);
  29.967 -    val all_variants =
  29.968 -        map (fn (_, variants, _, _, _) => variants) i_model
  29.969 -        |> flat
  29.970 -        |> distinct op =
  29.971 -    val variants_separated = map (filter_variants' i_model) all_variants
  29.972 -    val sums_corr = map (Model_Def.cnt_corrects) variants_separated
  29.973 -    val sum_variant_s = Model_Def.arrange_args sums_corr (1, all_variants)
  29.974 -    val (_, max_variant) = hd (*..crude decision, up to improvement *)
  29.975 -      (sort (fn ((i, _), (j, _)) => int_ord (i, j)) sum_variant_s)
  29.976 -    val i_model_max =
  29.977 -      filter (fn (_, variants, _ , _ ,_) => member (op =) variants max_variant) i_model
  29.978 -    val equal_descr_pairs = map (get_equal_descr i_model) model_patt |> flat
  29.979 -    val env_model = make_env_model equal_descr_pairs
  29.980 -    val equal_givens = filter (fn ((m_field, _), _) => m_field = "#Given") equal_descr_pairs
  29.981 -
  29.982 -    val subst_eval_list =
  29.983 -           make_envs_preconds equal_givens;
  29.984 -"~~~~~ fun make_envs_preconds , args:"; val (equal_givens) = (equal_givens);
  29.985 -val xxx = (fn ((_, (_, id)), (_, _, _, _, (feedb, _))) =>
  29.986 -           discern_feedback id feedb)
  29.987 -val           ((_, (_, id)), (_, _, _, _, (feedb, _))) = nth 1 equal_givens;
  29.988 -"~~~~~ fun discern_feedback , args:"; val (id, (Model_Def.Cor_TEST ((descr, ts)))) = (id, feedb);
  29.989 -
  29.990 -           discern_typ id (descr, ts);
  29.991 -"~~~~~ fun discern_typ , args:"; val (id, (descr, ts)) = (id, (descr, ts));
  29.992 -(*|------------------- contine me_add_find_Constants -----------------------------------------*)
  29.993 -(*\------------------- step into me_add_find_Constants -------------------------------------//*)
  29.994 -val (p,_,f,nxt,_,pt) = return_me_add_find_Constants;
  29.995 -(*/########################## before destroying elementwise input of lists ##################\* )
  29.996 -val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Find "AdditionalValues [u]" = nxt;
  29.997 -val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Find "AdditionalValues [v]" = nxt;
  29.998 -( *\########################## before destroying elementwise input of lists ##################/*)
  29.999 -val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Find "AdditionalValues [u, v]" = nxt;
 29.1000 -
 29.1001 -val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Relation "Extremum (A = 2 * u * v - u \<up> 2)" = nxt;
 29.1002 -val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Relation "SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2]" = nxt;
 29.1003 -val return_me_Add_Relation_SideConditions
 29.1004 -                     = me nxt p c pt;
 29.1005 -(*+*)val (_, _, _, Specify_Theory "Diff_App", _, _) = return_me_Add_Relation_SideConditions; (*###############*)
 29.1006 -(*/------------------- step into me Add_Relation_SideConditions ----------------------------\\*)
 29.1007 -"~~~~~ fun me , args:"; val (tac, p, _, pt) = (nxt, p, c, pt);
 29.1008 -      val ctxt = Ctree.get_ctxt pt p;
 29.1009 -(**)  val (pt, p) = (**) 
 29.1010 -  	    (**)case(**) Step.by_tactic tac (pt, p) (**)of(**)
 29.1011 -(**) 		    ("ok", (_, _, ptp)) => ptp (**) ;
 29.1012 -
 29.1013 -   (*case*)
 29.1014 -      Step.do_next p ((pt, Pos.e_pos'), []) (*of*);
 29.1015 -(*//------------------ step into do_next ---------------------------------------------------\\*)
 29.1016 -"~~~~~ fun do_next , args:"; val ((ip as (_, p_)), (ptp as (pt, p), tacis))
 29.1017 -  = (p, ((pt, Pos.e_pos'), [])) (*of*);
 29.1018 -  (*if*) Pos.on_calc_end ip (*else*);
 29.1019 -      val (_, probl_id, _) = Calc.references (pt, p);
 29.1020 -      (*case*) tacis (*of*);
 29.1021 -        (*if*) probl_id = Problem.id_empty (*else*);
 29.1022 -
 29.1023 -      Step.switch_specify_solve p_ (pt, ip);
 29.1024 -"~~~~~ fun switch_specify_solve , args:"; val (state_pos, (pt, input_pos)) = (p_, (pt, ip));
 29.1025 -      (*if*) Pos.on_specification ([], state_pos) (*then*);
 29.1026 -      Step.specify_do_next (pt, input_pos);
 29.1027 -"~~~~~ fun specify_do_next , args:"; val ((ptp as (pt, (p, p_)))) = (pt, input_pos);
 29.1028 -(*isa------ERROR: Refine_Problem INSTEAD 
 29.1029 -            isa2: Specify_Theory "Diff_App"*)
 29.1030 -    val (_, (p_', tac as Specify_Theory "Diff_App")) =
 29.1031 -(*ERROR------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*)
 29.1032 -   Specify.find_next_step ptp;
 29.1033 -"~~~~~ fun find_next_step , args:"; val (pt, pos as (_, p_)) = (ptp);
 29.1034 -    val {meth = met, origin = origin as (oris, o_refs as (_, pI', mI'), _), probl = pbl,
 29.1035 -      spec = refs, ...} = Calc.specify_data (pt, pos);
 29.1036 -    val ctxt = Ctree.get_ctxt pt pos;
 29.1037 -      (*if*) Ctree.just_created (pt, pos) andalso origin <> Ctree.e_origin (*else*);
 29.1038 -        (*if*) p_ = Pos.Pbl (*then*);
 29.1039 -
 29.1040 -val ("dummy", (Pbl, tac as Specify_Theory "Diff_App")) =
 29.1041 -(*ERROR------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*)
 29.1042 -          for_problem ctxt oris (o_refs, refs) (pbl, met);
 29.1043 -"~~~~~ fun for_problem , args:"; val (ctxt, oris, ((dI', pI', mI'), (dI, pI, mI)), (pbl, met)) =
 29.1044 -  (ctxt, oris, (o_refs, refs), (pbl, met));
 29.1045 -    val cpI = if pI = Problem.id_empty then pI' else pI;
 29.1046 -    val cmI = if mI = MethodC.id_empty then mI' else mI;
 29.1047 -    val {model = pbt, where_rls, where_, ...} = Problem.from_store ctxt cpI;
 29.1048 -    val {model = mpc, ...} = MethodC.from_store ctxt cmI
 29.1049 -
 29.1050 -(*+*)val [Const ("Orderings.ord_class.less", _) $ Const ("Groups.zero_class.zero", _) $
 29.1051 -  Free ("fixes", _)] = where_
 29.1052 -
 29.1053 -    val (preok, _) =
 29.1054 - Pre_Conds.check ctxt where_rls where_ (pbt, I_Model.OLD_to_TEST pbl);
 29.1055 -(*///----------------- step into check -------------------------------------------------\\*)
 29.1056 -"~~~~~ fun check , args:"; val (ctxt, where_rls, pres, (model_patt, i_model)) =
 29.1057 -  (ctxt, where_rls, where_, (pbt, I_Model.OLD_to_TEST pbl));
 29.1058 -(*+*)val "[0 < fixes]" = pres |> UnparseC.terms @{context}
 29.1059 -(*+*)val "[\"(#Given, (Constants, fixes))\", \"(#Find, (Maximum, maxx))\", \"(#Find, (AdditionalValues, vals))\", \"(#Relate, (Extremum, extr))\", \"(#Relate, (SideConditions, sideconds))\"]"
 29.1060 -(*+*)  = model_patt |> Model_Pattern.to_string @{context}
 29.1061 -(*+*)val "[\n(1, [1, 2, 3], true ,#Given, (Cor_TEST Constants [r = 7] , pen2str, Position.T)), \n(2, [1, 2, 3], true ,#Find, (Cor_TEST Maximum A , pen2str, Position.T)), \n(3, [1, 2, 3], true ,#Find, (Cor_TEST AdditionalValues [u, v] , pen2str, Position.T)), \n(4, [1, 2, 3], true ,#Relate, (Cor_TEST Extremum (A = 2 * u * v - u \<up> 2) , pen2str, Position.T)), \n(5, [1, 2], true ,#Relate, (Cor_TEST SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str, Position.T))]"
 29.1062 - = i_model |> I_Model.to_string_TEST @{context}
 29.1063 -
 29.1064 -val return_make_environments as (_, (env_subst, env_eval)) =
 29.1065 -           Pre_Conds.make_environments model_patt i_model
 29.1066 -
 29.1067 -(*+*)val [(Free ("fixes", T1), Free ("r", T2))] = env_subst (*?!? Const*)
 29.1068 -(*+*)val Type ("Real.real", []) = T1
 29.1069 -(*+*)val Type ("Real.real", []) = T2
 29.1070 -
 29.1071 -(*+*)val [(Free ("r", T2), Const ("Num.numeral_class.numeral", _) $ _)] = env_eval
 29.1072 -(*+*)val Type ("Real.real", []) = T2
 29.1073 -
 29.1074 -val (_, (env_subst, env_eval)) = return_make_environments;
 29.1075 -(*|||----------------- contine check -----------------------------------------------------*)
 29.1076 -      val pres_subst = map (TermC.subst_atomic_all env_subst) pres;
 29.1077 -
 29.1078 -(*|||----------------- contine check -----------------------------------------------------*)
 29.1079 -(*+*)val [(true, Const ("Orderings.ord_class.less", _) $
 29.1080 -  Const ("Groups.zero_class.zero", _) $ Free ("r", _))] = pres_subst
 29.1081 -
 29.1082 -      val full_subst = map (fn (bool, t) => (bool, subst_atomic env_eval t)) pres_subst
 29.1083 -(*+*)val [(true,
 29.1084 -     Const ("Orderings.ord_class.less", _) $ Const ("Groups.zero_class.zero", _) $
 29.1085 -       (Const ("Num.numeral_class.numeral", _) $ _))] = full_subst
 29.1086 -
 29.1087 -      val evals = map (eval ctxt where_rls) full_subst
 29.1088 -val return_check_OLD = (foldl and_ (true, map fst evals), pres_subst)
 29.1089 -(*\\\----------------- step into check -------------------------------------------------\\*)
 29.1090 -
 29.1091 -    val (preok as true, _) = return_check_OLD
 29.1092 -(*+---------------^^^^*)
 29.1093 -(*\\------------------ step into do_next ---------------------------------------------------\\*)
 29.1094 -(*\------------------- step into me_Add_Relation_SideConditions ----------------------------//*)
 29.1095 -val (p, _, f, nxt, _, pt) = return_me_Add_Relation_SideConditions
 29.1096 -                                      val Specify_Theory "Diff_App" = nxt;
 29.1097 -
 29.1098 -val return_me_Specify_Theory
 29.1099 -                     = me nxt p c pt; val Specify_Problem ["univariate_calculus", "Optimisation"] = #4 return_me_Specify_Theory;
 29.1100 -\<close> ML \<open>(*/------------- step into me_Specify_Theory -----------------------------------------\\*)
 29.1101 -(*/------------------- step into me_Specify_Theory -----------------------------------------\\*)
 29.1102 -"~~~~~ fun me , args:"; val (tac, p, _, pt) = (nxt, p, c, pt);
 29.1103 -      val ctxt = Ctree.get_ctxt pt p;
 29.1104 -(*      val (pt, p) = *)
 29.1105 -  	    (*case*) Step.by_tactic tac (pt, p) (*of*);
 29.1106 -(*		    ("ok", (_, _, ptp)) => ptp *)
 29.1107 -val return_Step_by_tactic =
 29.1108 -      Step.by_tactic tac (pt, p);
 29.1109 -(*//------------------ step into Step_by_tactic --------------------------------------------\\*)
 29.1110 -"~~~~~ fun by_tactic , args:"; val (tac, (ptp as (pt, p))) = (tac, (pt, p));
 29.1111 -    (*case*) Specify_Step.check tac (pt, p) (*of*);
 29.1112 -
 29.1113 -(*||------------------ contine Step_by_tactic ------------------------------------------------*)
 29.1114 -(*\\------------------ step into Step_by_tactic --------------------------------------------//*)
 29.1115 -
 29.1116 -val ("ok", (_, _, ptp)) = return_Step_by_tactic;
 29.1117 -(*|------------------- continue me Specify_Theory --------------------------------------------*)
 29.1118 -
 29.1119 -val ("ok", (ts as (_, _, _) :: _, _, _)) =
 29.1120 -    (*case*)
 29.1121 -      Step.do_next p ((pt, Pos.e_pos'), []) (*of*);
 29.1122 -(*//------------------ step into do_next ---------------------------------------------------\\*)
 29.1123 -"~~~~~ fun do_next , args:"; val ((ip as (_, p_)), (ptp as (pt, p), tacis))
 29.1124 -  = (p, ((pt, Pos.e_pos'), [])) (*of*);
 29.1125 -  (*if*) Pos.on_calc_end ip (*else*);
 29.1126 -      val (_, probl_id, _) = Calc.references (pt, p);
 29.1127 -val _ =
 29.1128 -      (*case*) tacis (*of*);
 29.1129 -        (*if*) probl_id = Problem.id_empty (*else*);
 29.1130 -
 29.1131 -      Step.switch_specify_solve p_ (pt, ip);
 29.1132 -"~~~~~ fun switch_specify_solve , args:"; val (state_pos, (pt, input_pos)) = (p_, (pt, ip));
 29.1133 -      (*if*) Pos.on_specification ([], state_pos) (*then*);
 29.1134 -
 29.1135 -      Step.specify_do_next (pt, input_pos);
 29.1136 -"~~~~~ fun specify_do_next , args:"; val ((ptp as (pt, (p, p_)))) = (pt, input_pos);
 29.1137 -    val (_, (p_', tac)) = Specify.find_next_step ptp
 29.1138 -    val ist_ctxt =  Ctree.get_loc pt (p, p_);
 29.1139 -    (*case*) tac (*of*);
 29.1140 -
 29.1141 -Step_Specify.by_tactic_input tac (pt, (p, p_'));
 29.1142 -(*+*)val Specify_Theory "Diff_App" = tac;
 29.1143 -"~~~~~ fun by_tactic_input , args:"; val ((Tactic.Specify_Theory dI), (pt, pos as (_, Pbl)))
 29.1144 -  = (tac, (pt, (p, p_')));
 29.1145 -      val (oris, dI, dI', pI', probl, ctxt) = case get_obj I pt p of
 29.1146 -        PblObj {origin = (oris, (dI,_,_),_), spec = (dI',pI',_), probl, ctxt, ...} =>
 29.1147 -          (oris, dI, dI', pI', probl, ctxt)
 29.1148 -	    val thy = ThyC.get_theory ctxt (if dI' = ThyC.id_empty then dI else dI');
 29.1149 -      val {model, where_, where_rls,...} = Problem.from_store (Ctree.get_ctxt pt pos) pI
 29.1150 -(*\\------------------ step into do_next ---------------------------------------------------//*)
 29.1151 -\<close> ML \<open>(*\------------- step into me_Specify_Theory -----------------------------------------//*)
 29.1152 -(*\------------------- step into me_Specify_Theory -----------------------------------------//*)
 29.1153 -val (p,_,f,nxt,_,pt) = return_me_Specify_Theory;
 29.1154 -
 29.1155 -val return_me_Specify_Problem (* keep for continuing me *)
 29.1156 -                     = me nxt p c pt; val Specify_Method ["Optimisation", "by_univariate_calculus"] = #4 return_me_Specify_Problem;
 29.1157 -\<close> ML \<open>(*/------------- step into me_Specify_Problem ----------------------------------------\\*)
 29.1158 -(*/------------------- step into me_Specify_Problem ----------------------------------------\\*)
 29.1159 -"~~~~~ fun me , args:"; val (tac, p, _, pt) = (nxt, p, c, pt);
 29.1160 -      val ctxt = Ctree.get_ctxt pt p
 29.1161 -
 29.1162 -(** )  val ("ok", (_, _, ptp as (pt, p))) =( **)
 29.1163 -(**)    val return_by_tactic =(**) (*case*)
 29.1164 -      Step.by_tactic tac (pt, p) (*of*);
 29.1165 -(*//------------------ step into by_tactic -------------------------------------------------\\*)
 29.1166 -"~~~~~ fun by_tactic , args:"; val (tac, (ptp as (pt, p))) = (tac, (pt, p));
 29.1167 -
 29.1168 -    (*case*)
 29.1169 -      Step.check tac (pt, p) (*of*);
 29.1170 -"~~~~~ fun check , args:"; val (tac, (ctree, pos)) = (tac, (pt, p));
 29.1171 -  (*if*) Tactic.for_specify tac (*then*);
 29.1172 -
 29.1173 -Specify_Step.check tac (ctree, pos);
 29.1174 -"~~~~~ fun check , args:"; val ((Tactic.Specify_Problem pID), (pt, pos as (p, _)))
 29.1175 -  = (tac, (ctree, pos));
 29.1176 -		    val (oris, dI, pI, dI', pI', itms) = case Ctree.get_obj I pt p of
 29.1177 -		      Ctree.PblObj {origin = (oris, (dI, pI, _), _), spec = (dI', pI', _), probl = itms, ...}
 29.1178 -		        => (oris, dI, pI, dI', pI', itms)
 29.1179 -	      val thy = ThyC.get_theory ctxt (if dI' = ThyC.id_empty then dI else dI');
 29.1180 -(*\\------------------ step into by_tactic -------------------------------------------------//*)
 29.1181 -val ("ok", (_, _, ptp as (pt, p))) = return_by_tactic (* kept for continuing me *);
 29.1182 -
 29.1183 -      (*case*)
 29.1184 -      Step.do_next p ((pt, Pos.e_pos'), []) (*of*);
 29.1185 -"~~~~~ fun do_next , args:"; val ((ip as (_, p_)), (ptp as (pt, p), tacis)) = (p, ((pt, Pos.e_pos'), []));
 29.1186 -  (*if*) Pos.on_calc_end ip (*else*);
 29.1187 -      val (_, probl_id, _) = Calc.references (pt, p);
 29.1188 -val _ =
 29.1189 -      (*case*) tacis (*of*);
 29.1190 -        (*if*) probl_id = Problem.id_empty (*else*);
 29.1191 -
 29.1192 -      Step.switch_specify_solve p_ (pt, ip);
 29.1193 -"~~~~~ fun switch_specify_solve , args:"; val (state_pos, (pt, input_pos)) = (p_, (pt, ip));
 29.1194 -      (*if*) Pos.on_specification ([], state_pos) (*then*);
 29.1195 -
 29.1196 -      Step.specify_do_next (pt, input_pos);
 29.1197 -"~~~~~ fun specify_do_next , args:"; val ((ptp as (pt, (p, p_)))) = ((pt, input_pos));
 29.1198 -    val (_, (p_', tac)) = Specify.find_next_step ptp
 29.1199 -    val ist_ctxt =  Ctree.get_loc pt (p, p_)
 29.1200 -val _ =
 29.1201 -    (*case*) tac (*of*);
 29.1202 -
 29.1203 -Step_Specify.by_tactic_input tac (pt, (p, p_'));
 29.1204 -"~~~~~ fun by_tactic_input , args:"; val ((Tactic.Specify_Method id), (pt, pos))
 29.1205 -  = (tac, (pt, (p, p_')));
 29.1206 -
 29.1207 -(**)val return_complete_for =(**)
 29.1208 -(** )  val (o_model, ctxt, i_model) =( **)
 29.1209 -Specify_Step.complete_for id (pt, pos);
 29.1210 -(*//------------------ step into complete_for ----------------------------------------------\\*)
 29.1211 -"~~~~~ fun complete_for , args:"; val (mID, (ctree, pos)) = (id, (pt, pos));
 29.1212 -
 29.1213 -(*+*)val ["Optimisation", "by_univariate_calculus"] = mID
 29.1214 -(*OLD*  )
 29.1215 -    val {origin = (o_model, _, _), probl = i_prob, ctxt,
 29.1216 -       ...} = Calc.specify_data (ctree, pos);
 29.1217 -    val {model = m_patt, where_, where_rls, ...} = MethodC.from_store ctxt mID
 29.1218 -    val {origin = (root_model, _, _), ...} = Calc.specify_data (ctree, ([], Pos.Und))
 29.1219 -    val (o_model', ctxt') = O_Model.complete_for m_patt root_model (o_model, ctxt)
 29.1220 -( *---*)
 29.1221 -    val {origin = (o_model, o_refs, _), spec = refs, probl = i_prob, meth = met_imod, ctxt,
 29.1222 -       ...} = Calc.specify_data (ctree, pos);
 29.1223 -    val ctxt = Ctree.get_ctxt ctree pos
 29.1224 -    val (dI, _, _) = References.select_input o_refs refs;
 29.1225 -    val {model = m_patt, where_, where_rls, ...} = MethodC.from_store ctxt mID
 29.1226 -    val {origin = (root_model, _, _), ...} = Calc.specify_data (ctree, ([], Pos.Und))
 29.1227 -    val (o_model', ctxt') = O_Model.complete_for m_patt root_model (o_model, ctxt)
 29.1228 -(*NEW*)
 29.1229 -
 29.1230 -(**)val return_match_itms_oris = (**)
 29.1231 -(** )val (_, (i_model, _)) = ( **)
 29.1232 -(*OLD* )
 29.1233 -   M_Match.match_itms_oris ctxt i_prob (m_patt, where_, where_rls) o_model';
 29.1234 -( *---*)
 29.1235 -     M_Match.match_itms_oris ctxt o_model' (I_Model.OLD_to_TEST i_prob, I_Model.OLD_to_TEST i_prob)
 29.1236 -              (m_patt, where_, where_rls);
 29.1237 -(*NEW*)
 29.1238 -\<close> ML \<open>(*//############ @ {context} within fun match_itms_oris ------------------------------\\*)
 29.1239 -(*//################## @ {context} within fun match_itms_oris -----------------------------\\*)
 29.1240 -(*///----------------- step into match_itms_oris -------------------------------------------\\*)
 29.1241 -"~~~~~ fun match_itms_oris, args:"; val (ctxt, o_model, (pbl_imod, met_imod), (m_patt, where_, where_rls)) =
 29.1242 -  (ctxt, o_model', (I_Model.OLD_to_TEST i_prob, I_Model.OLD_to_TEST i_prob), (m_patt, where_, where_rls));
 29.1243 -
 29.1244 -(**)val return_fill_method =(**)
 29.1245 -(** )val met_imod =( **)
 29.1246 -           fill_method o_model (pbl_imod, met_imod) m_patt;
 29.1247 -(*////--------------- step into fill_method -----------------------------------------------\\*)
 29.1248 -"~~~~~ fun fill_method , args:"; val (o_model, (pbl_imod, met_imod), met_patt) =
 29.1249 -  (o_model, (pbl_imod, met_imod), m_patt);
 29.1250 -
 29.1251 -(*+*)val "[\n(1, [1, 2, 3], true ,#Given, (Cor_TEST Constants [r = 7] , pen2str, Position.T)), \n(2, [1, 2, 3], true ,#Find, (Cor_TEST Maximum A , pen2str, Position.T)), \n(3, [1, 2, 3], true ,#Find, (Cor_TEST AdditionalValues [u, v] , pen2str, Position.T)), \n(4, [1, 2, 3], true ,#Relate, (Cor_TEST Extremum (A = 2 * u * v - u \<up> 2) , pen2str, Position.T)), \n(5, [1, 2], true ,#Relate, (Cor_TEST SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str, Position.T))]"
 29.1252 - = pbl_imod |> I_Model.to_string_TEST @{context}
 29.1253 -(*+*)val "[\n(1, [1, 2, 3], true ,#Given, (Cor_TEST Constants [r = 7] , pen2str, Position.T)), \n(2, [1, 2, 3], true ,#Find, (Cor_TEST Maximum A , pen2str, Position.T)), \n(3, [1, 2, 3], true ,#Find, (Cor_TEST AdditionalValues [u, v] , pen2str, Position.T)), \n(4, [1, 2, 3], true ,#Relate, (Cor_TEST Extremum (A = 2 * u * v - u \<up> 2) , pen2str, Position.T)), \n(5, [1, 2], true ,#Relate, (Cor_TEST SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str, Position.T))]"
 29.1254 - = met_imod |> I_Model.to_string_TEST @{context}
 29.1255 -
 29.1256 -(**)val return_max_variants =(**)
 29.1257 -(** )val pbl_max_vnts as [2, 1] =( **)
 29.1258 - Model_Def.max_variants o_model pbl_imod
 29.1259 -\<close> ML \<open> (*//----------- step into max_variants ----------------------------------------------\\*)
 29.1260 -(*//------------------ step into max_variants ----------------------------------------------\\*)
 29.1261 -"~~~~~ fun max_variants , args:"; val (o_model, i_model) = (o_model, pbl_imod);
 29.1262 -\<close> ML \<open>
 29.1263 -      val all_variants as [1, 2, 3] =
 29.1264 -          map (fn (_, variants, _, _, _) => variants) i_model
 29.1265 -          |> flat
 29.1266 -          |> distinct op =
 29.1267 -\<close> ML \<open>
 29.1268 -      val variants_separated = map (filter_variants' i_model) all_variants
 29.1269 -(*+*)val ["[\n(1, [1, 2, 3], true ,#Given, (Cor_TEST Constants [r = 7] , pen2str, Position.T)), \n(2, [1, 2, 3], true ,#Find, (Cor_TEST Maximum A , pen2str, Position.T)), \n(3, [1, 2, 3], true ,#Find, (Cor_TEST AdditionalValues [u, v] , pen2str, Position.T)), \n(4, [1, 2, 3], true ,#Relate, (Cor_TEST Extremum (A = 2 * u * v - u \<up> 2) , pen2str, Position.T)), \n(5, [1, 2], true ,#Relate, (Cor_TEST SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str, Position.T))]",
 29.1270 -          "[\n(1, [1, 2, 3], true ,#Given, (Cor_TEST Constants [r = 7] , pen2str, Position.T)), \n(2, [1, 2, 3], true ,#Find, (Cor_TEST Maximum A , pen2str, Position.T)), \n(3, [1, 2, 3], true ,#Find, (Cor_TEST AdditionalValues [u, v] , pen2str, Position.T)), \n(4, [1, 2, 3], true ,#Relate, (Cor_TEST Extremum (A = 2 * u * v - u \<up> 2) , pen2str, Position.T)), \n(5, [1, 2], true ,#Relate, (Cor_TEST SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str, Position.T))]",
 29.1271 -          "[\n(1, [1, 2, 3], true ,#Given, (Cor_TEST Constants [r = 7] , pen2str, Position.T)), \n(2, [1, 2, 3], true ,#Find, (Cor_TEST Maximum A , pen2str, Position.T)), \n(3, [1, 2, 3], true ,#Find, (Cor_TEST AdditionalValues [u, v] , pen2str, Position.T)), \n(4, [1, 2, 3], true ,#Relate, (Cor_TEST Extremum (A = 2 * u * v - u \<up> 2) , pen2str, Position.T))]"]
 29.1272 - = variants_separated |> map (I_Model.to_string_TEST @{context})
 29.1273 -
 29.1274 -      val sums_corr as [5, 5, 4] = map (cnt_corrects) variants_separated
 29.1275 -      (*----------------#--#--#*)
 29.1276 -      (*---------------------^-------^-------^*)
 29.1277 -      val sum_variant_s as [(5, 1), (5, 2), (4, 3)] = arrange_args sums_corr (1, all_variants)
 29.1278 -      val max_first as [(5, 2), (5, 1), (4, 3)] = rev (sort (fn ((i, _), (j, _)) => int_ord (i, j)) sum_variant_s)
 29.1279 -      (*----------------##====--##====--//////---------^^^^*)
 29.1280 -      (*------------^--^-#-------#*)
 29.1281 -      val maxes as [2, 1] = filter (fn (cnt, _) => curry op = (fst (hd max_first)) cnt) max_first
 29.1282 -        |> map snd
 29.1283 -val return_max_variants = maxes
 29.1284 -(*\\------------------ step into max_variants ----------------------------------------------//*)
 29.1285 -\<close> ML \<open> (*\\----------- step into max_variants ----------------------------------------------//*)
 29.1286 -val pbl_max_vnts as [2, 1] = return_max_variants;
 29.1287 -
 29.1288 -    (*probably pbl/met_imod = [], so take met_patt; if empty return Sup*)
 29.1289 -    val i_from_met = map (fn (_, (descr, _)) => (*order from met_patt*)
 29.1290 -      Pre_Conds.get_descr_vnt descr pbl_max_vnts met_imod) met_patt (*\<longrightarrow> right order for args*)
 29.1291 -(*+MET: Sup..*)val "[\n(1, [1, 2, 3], true ,#Given, (Cor_TEST Constants [r = 7] , pen2str, Position.T)), \n(2, [1, 2, 3], true ,#Find, (Cor_TEST Maximum A , pen2str, Position.T)), \n(4, [1, 2, 3], true ,#Relate, (Cor_TEST Extremum (A = 2 * u * v - u \<up> 2) , pen2str, Position.T)), \n(5, [1, 2], true ,#Relate, (Cor_TEST SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str, Position.T)), \n(0, [], false ,i_model_empty, (Sup_TEST FunctionVariable, Position.T)), \n(0, [], false ,i_model_empty, (Sup_TEST Input_Descript.Domain, Position.T)), \n(0, [], false ,i_model_empty, (Sup_TEST ErrorBound, Position.T)), \n(3, [1, 2, 3], true ,#Find, (Cor_TEST AdditionalValues [u, v] , pen2str, Position.T))]"
 29.1292 -  = i_from_met |> I_Model.to_string_TEST @{context}
 29.1293 -
 29.1294 -    val met_max_vnts as [2, 1] = Model_Def.max_variants o_model i_from_met;
 29.1295 -    val max_vnt as 2 = hd (inter op= pbl_max_vnts met_max_vnts);
 29.1296 -    (*add items from pbl_imod (without overwriting existing items in met_imod)*)
 29.1297 -
 29.1298 -\<close> ML \<open>
 29.1299 -val return_add_other = map (
 29.1300 -           add_other max_vnt pbl_imod) i_from_met;
 29.1301 -(*+*)val "[\n(1, [1, 2, 3], true ,#Given, (Cor_TEST Constants [r = 7] , pen2str, Position.T)), \n(2, [1, 2, 3], true ,#Find, (Cor_TEST Maximum A , pen2str, Position.T)), \n(4, [1, 2, 3], true ,#Relate, (Cor_TEST Extremum (A = 2 * u * v - u \<up> 2) , pen2str, Position.T)), \n(5, [1, 2], true ,#Relate, (Cor_TEST SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str, Position.T)), \n(0, [2], false ,i_model_empty, (Sup_TEST FunctionVariable, Position.T)), \n(0, [2], false ,i_model_empty, (Sup_TEST Input_Descript.Domain, Position.T)), \n(0, [2], false ,i_model_empty, (Sup_TEST ErrorBound, Position.T)), \n(3, [1, 2, 3], true ,#Find, (Cor_TEST AdditionalValues [u, v] , pen2str, Position.T))]"
 29.1302 -  = return_add_other |> I_Model.to_string_TEST @{context};
 29.1303 -(*/////-------------- step into add_other -------------------------------------------------\\*)
 29.1304 -"~~~~~ fun add_other_5 , args:"; val (max_vnt, i1_model, (i2, _, bool2, m_field2, (Sup_TEST (descr2, ts2), pos2))) =
 29.1305 -  (max_vnt, pbl_imod, nth 5 i_from_met);
 29.1306 -
 29.1307 -(*+*)val Const ("Input_Descript.FunctionVariable", _) = descr2;
 29.1308 -
 29.1309 -val (_, vnts1, _, _, (feedb1, _)) = (i2, [], bool2, m_field2, (Sup_TEST (descr2, ts2), pos2))
 29.1310 -val SOME (descr1 as (Const ("Input_Descript.FunctionVariable", _)) ) =
 29.1311 -      get_dscr' feedb1
 29.1312 -val true =
 29.1313 -        descr1 = descr2
 29.1314 -val true =
 29.1315 -          Model_Def.member_vnt vnts1 max_vnt
 29.1316 -val NONE =
 29.1317 -    find_first (fn (_, vnts1, _, _, (feedb1, _)) => case get_dscr' feedb1 of
 29.1318 -          NONE => false
 29.1319 -        | SOME descr1 => descr1 = descr2 andalso Model_Def.member_vnt vnts1 max_vnt) i1_model
 29.1320 -
 29.1321 -val return_add_other_1 = (i2, [max_vnt], bool2, m_field2, (Sup_TEST (descr2, ts2), pos2))
 29.1322 -val check as true = return_add_other_1 = nth 5 return_add_other
 29.1323 -(*\\\\\-------------- step into add_other -------------------------------------------------//*)
 29.1324 -    val i_from_pbl = return_add_other
 29.1325 -(*\\\\---------------- step into fill_method -----------------------------------------------//*)
 29.1326 -val return_fill_method_step = filter (fn (_, vnts', _, _, _) => member op = vnts' max_vnt) i_from_met
 29.1327 -
 29.1328 -(*+MET: dropped ALL DUE TO is_empty_single_TEST*)val "[\n(1, [1, 2, 3], true ,#Given, (Cor_TEST Constants [r = 7] , pen2str, Position.T)), \n(2, [1, 2, 3], true ,#Find, (Cor_TEST Maximum A , pen2str, Position.T)), \n(4, [1, 2, 3], true ,#Relate, (Cor_TEST Extremum (A = 2 * u * v - u \<up> 2) , pen2str, Position.T)), \n(5, [1, 2], true ,#Relate, (Cor_TEST SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str, Position.T)), \n(3, [1, 2, 3], true ,#Find, (Cor_TEST AdditionalValues [u, v] , pen2str, Position.T))]" =
 29.1329 -  return_fill_method_step |> I_Model.to_string_TEST @{context}
 29.1330 -(*+*)val                                             "[\n(1, [1, 2, 3], true ,#Given, (Cor_TEST Constants [r = 7] , pen2str, Position.T)), \n(2, [1, 2, 3], true ,#Find, (Cor_TEST Maximum A , pen2str, Position.T)), \n(4, [1, 2, 3], true ,#Relate, (Cor_TEST Extremum (A = 2 * u * v - u \<up> 2) , pen2str, Position.T)), \n(5, [1, 2], true ,#Relate, (Cor_TEST SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str, Position.T)), \n(0, [2], false ,i_model_empty, (Sup_TEST FunctionVariable, Position.T)), \n(0, [2], false ,i_model_empty, (Sup_TEST Input_Descript.Domain, Position.T)), \n(0, [2], false ,i_model_empty, (Sup_TEST ErrorBound, Position.T)), \n(3, [1, 2, 3], true ,#Find, (Cor_TEST AdditionalValues [u, v] , pen2str, Position.T))]"
 29.1331 - = return_fill_method |> I_Model.to_string_TEST @{context};
 29.1332 -return_fill_method_step = return_fill_method; (*latter is correct, did not investigate further*)
 29.1333 -(*\\\----------------- step into match_itms_oris -------------------------------------------//*)
 29.1334 -(*\\################# @ {context} within fun match_itms_oris ------------------------------//*)
 29.1335 -\<close> ML \<open>(*\\############ @ {context} within fun match_itms_oris ------------------------------//*)
 29.1336 -val (_, (i_model, _)) = return_match_itms_oris;
 29.1337 -
 29.1338 -(*||------------------ continue. complete_for ------------------------------------------------*)
 29.1339 -      val (o_model, ctxt, i_model) = return_complete_for
 29.1340 -(*+isa*)val "[\n(1, [1, 2, 3], true ,#Given, (Cor_TEST Constants [r = 7] , pen2str, Position.T)), \n(2, [1, 2, 3], true ,#Find, (Cor_TEST Maximum A , pen2str, Position.T)), \n(4, [1, 2, 3], true ,#Relate, (Cor_TEST Extremum (A = 2 * u * v - u \<up> 2) , pen2str, Position.T)), \n(5, [1, 2], true ,#Relate, (Cor_TEST SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str, Position.T)), \n(0, [2], false ,i_model_empty, (Sup_TEST FunctionVariable, Position.T)), \n(0, [2], false ,i_model_empty, (Sup_TEST Input_Descript.Domain, Position.T)), \n(0, [2], false ,i_model_empty, (Sup_TEST ErrorBound, Position.T)), \n(3, [1, 2, 3], true ,#Find, (Cor_TEST AdditionalValues [u, v] , pen2str, Position.T))]"
 29.1341 - = i_model |> I_Model.to_string_TEST @{context}(*+isa*)
 29.1342 -(*+isa2:MET.Mis* ) val "[\n(1 ,[1, 2, 3] ,true ,#Given ,Cor Constants [r = 7] , pen2str), \n(2 ,[1, 2, 3] ,true ,#Find ,Cor Maximum A , pen2str), \n(3 ,[1, 2, 3] ,true ,#Find ,Cor AdditionalValues [u, v] , pen2str), \n(4 ,[1, 2, 3] ,true ,#Relate ,Cor Extremum (A = 2 * u * v - u \<up> 2) , pen2str), \n(5 ,[1, 2] ,true ,#Relate ,Cor SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str), \n(7 ,[1] ,false ,#Given ,Mis FunctionVariable funvar), \n(10 ,[1, 2] ,false ,#Given ,Mis Input_Descript.Domain doma), \n(12 ,[1, 2, 3] ,false ,#Given ,Mis ErrorBound err)]" =
 29.1343 -  i_model |> I_Model.to_string @{context} ( *+isa2*)
 29.1344 -(*\\------------------ step into complete_for ----------------------------------------------//*)
 29.1345 -      val (o_model, ctxt, i_model) = return_complete_for
 29.1346 -
 29.1347 -(*|------------------- continue. complete_for ------------------------------------------------*)
 29.1348 -val return_complete_for_step = (o_model', ctxt', i_model)
 29.1349 -
 29.1350 -val (o_model'_step, i_model_step) = (#1 return_complete_for_step, #3 return_complete_for_step)
 29.1351 -val (o_model', i_model) = (#1 return_complete_for, #3 return_complete_for)
 29.1352 -;
 29.1353 -(*+*)if (o_model'_step, i_model_step) = (o_model', i_model)
 29.1354 -(*+*)then () else error "return_complete_for_step <> return_complete_for";
 29.1355 -\<close> ML \<open>(*\------------- step into me Specify_Problem ----------------------------------------//*)
 29.1356 -(*\------------------- step into me Specify_Problem ----------------------------------------//*)
 29.1357 -val (p,_,f,nxt,_,pt) = return_me_Specify_Problem
 29.1358 -
 29.1359 -val return_me_Specify_Method
 29.1360 -                     = me nxt p c pt; val Add_Given "FunctionVariable b" = #4 return_me_Specify_Method;
 29.1361 -(*/------------------- step into me_Specify_Method -----------------------------------------\\*)
 29.1362 -\<close> ML \<open>(*/------------- step into me_Specify_Method -----------------------------------------\\*)
 29.1363 -"~~~~~ fun me , args:"; val (tac, p, _, pt) = (nxt, p, c, pt);
 29.1364 -
 29.1365 -(*+isa==isa2*)val "[]" =(*+*) get_obj g_met pt (fst p) |> I_Model.to_string @{context}
 29.1366 -
 29.1367 -      val ctxt = Ctree.get_ctxt pt p
 29.1368 -      val (pt, p) = 
 29.1369 -  	    case Step.by_tactic tac (pt, p) of
 29.1370 -  		    ("ok", (_, _, ptp)) => ptp;
 29.1371 -
 29.1372 -(*quick step into --> me_Specify_Method*)
 29.1373 -(*+*)val Specify_Method ["Optimisation", "by_univariate_calculus"] = tac;
 29.1374 -(*    Step.by_tactic*)
 29.1375 -"~~~~~ fun by_tactic , args:"; val () = ();
 29.1376 -(*    Step.check*)
 29.1377 -"~~~~~ fun check , args:"; val () = ();
 29.1378 -(*Specify_Step.check (Tactic.Specify_Method*)
 29.1379 -"~~~~~ fun check , args:"; val () = ();
 29.1380 -(*Specify_Step.complete_for*)
 29.1381 -"~~~~~ fun complete_for , args:"; val () = ();
 29.1382 -(* M_Match.match_itms_oris*)
 29.1383 -"~~~~~ fun match_itms_oris , args:"; val () = ();
 29.1384 -
 29.1385 -\<close> ML \<open>
 29.1386 -(*+isa*)val"[\n(1 ,[1, 2, 3] ,true ,#Given ,Cor Constants [r = 7] , pen2str), \n(2 ,[1, 2, 3] ,true ,#Find ,Cor Maximum A , pen2str), \n(4 ,[1, 2, 3] ,true ,#Relate ,Cor Extremum (A = 2 * u * v - u \<up> 2) , pen2str), \n(5 ,[1, 2] ,true ,#Relate ,Cor SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str), \n(0 ,[2] ,false ,i_model_empty ,Sup FunctionVariable), \n(0 ,[2] ,false ,i_model_empty ,Sup Input_Descript.Domain), \n(0 ,[2] ,false ,i_model_empty ,Sup ErrorBound), \n(3 ,[1, 2, 3] ,true ,#Find ,Cor AdditionalValues [u, v] , pen2str)]"
 29.1387 -(*+isa*)
 29.1388 -(*+isa2* )val "[\n(1 ,[1, 2, 3] ,true ,#Given ,Cor Constants [r = 7] , pen2str), \n(2 ,[1, 2, 3] ,true ,#Find ,Cor Maximum A , pen2str), \n(3 ,[1, 2, 3] ,true ,#Find ,Cor AdditionalValues [u, v] , pen2str), \n(4 ,[1, 2, 3] ,true ,#Relate ,Cor Extremum (A = 2 * u * v - u \<up> 2) , pen2str), \n(5 ,[1, 2] ,true ,#Relate ,Cor SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str), \n(7 ,[1] ,false ,#Given ,Mis FunctionVariable funvar), \n(10 ,[1, 2] ,false ,#Given ,Mis Input_Descript.Domain doma), \n(12 ,[1, 2, 3] ,false ,#Given ,Mis ErrorBound err)]"
 29.1389 -( *+isa2*)
 29.1390 - = get_obj g_met pt (fst p) |> I_Model.to_string @{context};
 29.1391 -
 29.1392 -         (*case*)
 29.1393 -      Step.do_next p ((pt, Pos.e_pos'), []) (*of*);
 29.1394 -(*//------------------ step into Step.do_next ----------------------------------------------\\*)
 29.1395 -"~~~~~ fun do_next , args:"; val ((ip as (_, p_)), (ptp as (pt, p), tacis)) = (p, ((pt, Pos.e_pos'), []));
 29.1396 -  (*if*) Pos.on_calc_end ip (*else*);
 29.1397 -      val (_, probl_id, _) = Calc.references (pt, p);
 29.1398 -val _ =
 29.1399 -      (*case*) tacis (*of*);
 29.1400 -        (*if*) probl_id = Problem.id_empty (*else*);
 29.1401 -
 29.1402 -      Step.switch_specify_solve p_ (pt, ip);
 29.1403 -(*///----------------- step into Step.switch_specify_solve ---------------------------------\\*)
 29.1404 -"~~~~~ fun switch_specify_solve , args:"; val (state_pos, (pt, input_pos)) = (p_, (pt, ip));
 29.1405 -      (*if*) Pos.on_specification ([], state_pos) (*then*);
 29.1406 -
 29.1407 -      Step.specify_do_next (pt, input_pos);
 29.1408 -(*////---------------- step into Step.specify_do_next --------------------------------------\\*)
 29.1409 -"~~~~~ fun specify_do_next , args:"; val ((ptp as (pt, (p, p_)))) = (pt, input_pos);
 29.1410 -
 29.1411 -    val (_, (p_', tac)) =
 29.1412 -   Specify.find_next_step ptp;
 29.1413 -"~~~~~ fun find_next_step , args:"; val ((pt, pos as (_, p_))) = (ptp);
 29.1414 -    val {meth = met, origin = origin as (oris, o_refs as (_, pI', mI'), _), probl = pbl,
 29.1415 -      spec = refs, ...} = Calc.specify_data (pt, pos);
 29.1416 -    val ctxt = Ctree.get_ctxt pt pos;
 29.1417 -      (*if*) Ctree.just_created (pt, pos) andalso origin <> Ctree.e_origin (*else*);
 29.1418 -        (*if*) p_ = Pos.Pbl (*else*);
 29.1419 -
 29.1420 -(*+isa*)val     "[\n(1 ,[1, 2, 3] ,true ,#Given ,Cor Constants [r = 7] , pen2str), \n(2 ,[1, 2, 3] ,true ,#Find ,Cor Maximum A , pen2str), \n(4 ,[1, 2, 3] ,true ,#Relate ,Cor Extremum (A = 2 * u * v - u \<up> 2) , pen2str), \n(5 ,[1, 2] ,true ,#Relate ,Cor SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str), \n(0 ,[2] ,false ,i_model_empty ,Sup FunctionVariable), \n(0 ,[2] ,false ,i_model_empty ,Sup Input_Descript.Domain), \n(0 ,[2] ,false ,i_model_empty ,Sup ErrorBound), \n(3 ,[1, 2, 3] ,true ,#Find ,Cor AdditionalValues [u, v] , pen2str)]"
 29.1421 -(*+isa*)
 29.1422 -(*isa2* )val "[\n(1 ,[1, 2, 3] ,true ,#Given ,Cor Constants [r = 7] , pen2str), \n(2 ,[1, 2, 3] ,true ,#Find ,Cor Maximum A , pen2str), \n(3 ,[1, 2, 3] ,true ,#Find ,Cor AdditionalValues [u, v] , pen2str), \n(4 ,[1, 2, 3] ,true ,#Relate ,Cor Extremum (A = 2 * u * v - u \<up> 2) , pen2str), \n(5 ,[1, 2] ,true ,#Relate ,Cor SideConditions [(u / 2) \<up> 2 + (2 / v) \<up> 2 = r \<up> 2] , pen2str), \n(7 ,[1] ,false ,#Given ,Mis FunctionVariable funvar), \n(10 ,[1, 2] ,false ,#Given ,Mis Input_Descript.Domain doma), \n(12 ,[1, 2, 3] ,false ,#Given ,Mis ErrorBound err)]" 
 29.1423 -( *isa2*)
 29.1424 - = met |> I_Model.to_string @{context};
 29.1425 -
 29.1426 -(*isa2*)val ("dummy", (Met, Add_Given "FunctionVariable b")) =(*isa2*)
 29.1427 -   Specify.for_method ctxt oris (o_refs, refs) (pbl, met);
 29.1428 -(*///// /------------- step into Step.for_method -------------------------------------------\\*)
 29.1429 -"~~~~~ fun for_method , args:"; val (ctxt, oris, ((dI', pI', mI'), (dI, pI, mI)), (_, met))
 29.1430 -  = (ctxt, oris, (o_refs, refs), (pbl, met));
 29.1431 -    val cmI = if mI = MethodC.id_empty then mI' else mI;
 29.1432 -    val {model, where_rls, where_, ...} = MethodC.from_store ctxt cmI;    (*..MethodC ?*)
 29.1433 -    val (preok, _) = Pre_Conds.check ctxt where_rls where_ (model, I_Model.OLD_to_TEST met);
 29.1434 -val NONE =
 29.1435 -    (*case*) find_first (I_Model.is_error o #5) met (*of*);
 29.1436 -
 29.1437 -(*isa2*)val SOME ("#Given", "FunctionVariable b") =(*isa2*)
 29.1438 -      (*case*)
 29.1439 -   Specify.item_to_add (ThyC.get_theory ctxt 
 29.1440 -     (if dI = ThyC.id_empty then dI' else dI)) oris mpc met (*of*);
 29.1441 -"~~~~~ fun item_to_add , args:"; val (thy, oris, _, itms)
 29.1442 -  = ((ThyC.get_theory ctxt (if dI = ThyC.id_empty then dI' else dI)), oris, mpc, met);
 29.1443 -(*\------------------- step into me_Specify_Method -----------------------------------------//*)
 29.1444 -\<close> ML \<open>(*\------------- step into me_Specify_Method -----------------------------------------//*)
 29.1445 -
 29.1446 -val (p,_,f,nxt,_,pt) = return_me_Specify_Method
 29.1447 -
 29.1448 -\<close> ML \<open>
 29.1449 -val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "Input_Descript.Domain {0<..<r}" = nxt;
 29.1450 -val (p,_,f,nxt,_,pt) = me nxt p c pt; val Add_Given "ErrorBound (\<epsilon> = 0)" = nxt;
 29.1451 -
 29.1452 -
 29.1453 -\<close> ML \<open>
 29.1454 -\<close>
 29.1455 -
 29.1456 -(*ML_file "Minisubpbl/biegel ? ? ?.sml"*)
 29.1457 -section \<open>===================================================================================\<close>
 29.1458 -section \<open>=====   ===========================================================================\<close>
 29.1459 +section \<open>=====  ============================================================================\<close>
 29.1460  ML \<open>
 29.1461  \<close> ML \<open>
 29.1462  
 29.1463 @@ -1457,5 +117,4 @@
 29.1464  
 29.1465  \<close> ML \<open>
 29.1466  \<close>
 29.1467 -
 29.1468  end