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