prepare 4: shift new code (previous CS was: intermediate I_Model.complete_method)
authorwneuper <Walther.Neuper@jku.at>
Mon, 18 Sep 2023 10:26:35 +0200
changeset 60748d9bae125ba2a
parent 60747 2eff296ab809
child 60749 10d828fb4dbb
prepare 4: shift new code (previous CS was: intermediate I_Model.complete_method)
src/Tools/isac/MathEngBasic/model-def.sml
src/Tools/isac/Specify/i-model.sml
src/Tools/isac/Specify/pre-conditions.sml
test/Tools/isac/Minisubpbl/150a-add-given-Maximum.sml
test/Tools/isac/Minisubpbl/400-start-meth-subpbl.sml
test/Tools/isac/Test_Theory.thy
     1.1 --- a/src/Tools/isac/MathEngBasic/model-def.sml	Mon Sep 18 08:38:33 2023 +0200
     1.2 +++ b/src/Tools/isac/MathEngBasic/model-def.sml	Mon Sep 18 10:26:35 2023 +0200
     1.3 @@ -14,6 +14,7 @@
     1.4  
     1.5    type variant
     1.6    type variants
     1.7 +
     1.8    type m_field = Model_Pattern.m_field
     1.9    type descriptor = Model_Pattern.descriptor
    1.10    type values
    1.11 @@ -45,6 +46,18 @@
    1.12  
    1.13    val i_model_empty : i_model_single
    1.14    val i_model_empty_TEST: i_model_single_TEST
    1.15 +
    1.16 +  val max_variants: i_model_TEST -> variant list * i_model_TEST list
    1.17 +
    1.18 +(*from isac_test for Minisubpbl*)
    1.19 +  val filter_variants': i_model_TEST -> variant -> i_model_TEST
    1.20 +  val cnt_corrects: i_model_TEST -> int
    1.21 +  val arrange_args: int list -> int * variant list -> (int * variant) list
    1.22 +
    1.23 +\<^isac_test>\<open>
    1.24 +(**)
    1.25 +\<close>
    1.26 +
    1.27  end
    1.28  
    1.29  (**)                   
    1.30 @@ -66,25 +79,6 @@
    1.31  type variants = variant list; (* variants given by Formalise.T *)
    1.32  type values = term list;
    1.33  
    1.34 -(** definitions for O_Model.T **)
    1.35 -
    1.36 -type o_model_single =
    1.37 -  (int *       (* sequence of input, 0 = untouched, drop with PIDE *)
    1.38 -	variants *   (* pointers to variants given in Formalise.T        *)
    1.39 -	m_field *    (* #Given | #Find | #Relate + TODO: #Where          *)
    1.40 -	descriptor * (* see Input_Descript.thy                           *)
    1.41 -	values       (* isalist2list t | [t]: the values of in item      *)
    1.42 -	);
    1.43 -type o_model = o_model_single list;  
    1.44 -val o_model_empty = (0, [], "", TermC.empty, [TermC.empty]) : o_model_single;
    1.45 -
    1.46 -fun o_model_single_to_string ctxt (i, vs, fi, t, ts) = 
    1.47 -  "(" ^ string_of_int i ^ ", " ^ (strs2str o (map string_of_int)) vs ^ ", " ^ fi ^ ", " ^
    1.48 -  UnparseC.term ctxt t ^ ", " ^ (strs2str o (map (UnparseC.term ctxt))) ts ^ ")";
    1.49 -fun o_model_to_string ctxt o_model =
    1.50 -  (strs2str' o (map (linefeed o (o_model_single_to_string ctxt)))) o_model;
    1.51 -
    1.52 -
    1.53  (** definitions for I_Model.T **)
    1.54  
    1.55  datatype i_model_feedback = 
    1.56 @@ -137,4 +131,58 @@
    1.57  val i_model_empty = (0, [], false, "i_model_empty", Syn "i_model_empty");
    1.58  val i_model_empty_TEST = (0, [], false, "i_model_empty", (feedback_empty_TEST, Position.none));
    1.59  
    1.60 +
    1.61 +(** max_variants **)
    1.62 +
    1.63 +fun filter_variants' i_singles n = 
    1.64 +  filter (fn (_, variants, _, _, _) => member op= variants n) i_singles
    1.65 +fun cnt_corrects i_model = 
    1.66 +  fold (curry op +) (map (fn (_, _, _, _, (Cor_TEST _, _)) => 1 | _ => 0) i_model) 0;
    1.67 +fun arrange_args [] _ = []
    1.68 +  | arrange_args (sum :: ss) (cnt, all) = (sum, nth cnt all) :: (arrange_args ss (cnt + 1, all)) 
    1.69 +
    1.70 +fun max_variants i_model =
    1.71 +    let
    1.72 +      val all_variants =
    1.73 +          map (fn (_, variants, _, _, _) => variants) i_model
    1.74 +          |> flat
    1.75 +          |> distinct op =
    1.76 +      val variants_separated = map (filter_variants' i_model) all_variants
    1.77 +      val sums_corr = map (cnt_corrects) variants_separated
    1.78 +      val sum_variant_s = arrange_args sums_corr (1, all_variants)
    1.79 +
    1.80 +      val max_first = rev (sort (fn ((i, _), (j, _)) => int_ord (i, j)) sum_variant_s)
    1.81 +      val maxes = filter (fn (cnt, _) => curry op = (fst (hd max_first)) cnt) max_first
    1.82 +        |> map snd
    1.83 +      val option_sequence = map 
    1.84 +        (fn (_, vnt) => if (member (op =) maxes vnt) then SOME vnt else NONE) sum_variant_s
    1.85 +(*THAT IS NONSENSE, SEE Test_Theory (*+*)if (pbl_max_imos*)
    1.86 +      val max_i_models = map (fn (pos_in_sum_variant_s, i_model) =>
    1.87 +            if is_some pos_in_sum_variant_s then i_model else [])
    1.88 +          (option_sequence ~~ variants_separated)
    1.89 +        |> filter_out (fn place_holder => place_holder = []);
    1.90 +    in
    1.91 +      (maxes, max_i_models)
    1.92 +    end 
    1.93 +
    1.94 +
    1.95 +(** definitions for O_Model.T **)
    1.96 +
    1.97 +type o_model_single =
    1.98 +  (int *       (* sequence of input, 0 = untouched, drop with PIDE *)
    1.99 +	variants *   (* pointers to variants given in Formalise.T        *)
   1.100 +	m_field *    (* #Given | #Find | #Relate + TODO: #Where          *)
   1.101 +	descriptor * (* see Input_Descript.thy                           *)
   1.102 +	values       (* isalist2list t | [t]: the values of in item      *)
   1.103 +	);
   1.104 +type o_model = o_model_single list;  
   1.105 +val o_model_empty = (0, [], "", TermC.empty, [TermC.empty]) : o_model_single;
   1.106 +
   1.107 +fun o_model_single_to_string ctxt (i, vs, fi, t, ts) = 
   1.108 +  "(" ^ string_of_int i ^ ", " ^ (strs2str o (map string_of_int)) vs ^ ", " ^ fi ^ ", " ^
   1.109 +  UnparseC.term ctxt t ^ ", " ^ (strs2str o (map (UnparseC.term ctxt))) ts ^ ")";
   1.110 +fun o_model_to_string ctxt o_model =
   1.111 +  (strs2str' o (map (linefeed o (o_model_single_to_string ctxt)))) o_model;
   1.112 +
   1.113 +
   1.114  (**)end(**)
     2.1 --- a/src/Tools/isac/Specify/i-model.sml	Mon Sep 18 08:38:33 2023 +0200
     2.2 +++ b/src/Tools/isac/Specify/i-model.sml	Mon Sep 18 10:26:35 2023 +0200
     2.3 @@ -553,7 +553,7 @@
     2.4    (feedb |> Pre_Conds.get_dscr' |> the |> UnparseC.term (ContextC.for_ERROR ()))
     2.5  fun fill_method o_model pbl_imod met_patt =
     2.6    let
     2.7 -    val (pbl_max_vnts, _) = Pre_Conds.max_variants met_patt pbl_imod;
     2.8 +    val (pbl_max_vnts, _) = Model_Def.max_variants pbl_imod;
     2.9      val from_pbl = map (fn (_, (descr, _)) =>
    2.10        Pre_Conds.get_descr_vnt descr pbl_max_vnts pbl_imod) met_patt
    2.11      val from_o_model = map ((fn i_single as (_, _, _, _, (feedb, _)) =>
     3.1 --- a/src/Tools/isac/Specify/pre-conditions.sml	Mon Sep 18 08:38:33 2023 +0200
     3.2 +++ b/src/Tools/isac/Specify/pre-conditions.sml	Mon Sep 18 10:26:35 2023 +0200
     3.3 @@ -23,8 +23,6 @@
     3.4  
     3.5    val of_max_variant: Model_Pattern.T -> Model_Def.i_model_TEST ->
     3.6         (bool * Model_Def.variant * Model_Def.i_model_TEST) * Env.T * (env_subst * env_eval)
     3.7 -  val max_variants: Model_Pattern.T -> Model_Def.i_model_TEST ->
     3.8 -       ( Model_Def.variant list * Model_Def.i_model_TEST list)(* * Env.T * (env_subst * env_eval)*)
     3.9    val make_envs_preconds: (Model_Pattern.single * Model_Def.i_model_single_TEST) list ->
    3.10      ((term * term) * (term * term)) list
    3.11  
    3.12 @@ -40,9 +38,6 @@
    3.13      (Model_Pattern.single * Model_Def.i_model_single_TEST) list
    3.14    val unchecked_OLD_to_TEST: term list -> (term * Position.T) list
    3.15  
    3.16 -  val arrange_args: int list -> int * Model_Def.variant list -> (int * Model_Def.variant) list
    3.17 -  val cnt_corrects: Model_Def.i_model_TEST -> int
    3.18 -
    3.19    val all_lhs_atoms: term list -> bool
    3.20    val handle_lists: term -> Model_Def.descriptor * term list -> Env.T;
    3.21    val filter_variants': Model_Def.i_model_TEST -> Model_Def.variant -> Model_Def.i_model_TEST
    3.22 @@ -253,20 +248,6 @@
    3.23    map (fn ((_, (_, id)), (_, _, _, _, (feedb, _))) => discern_feedback id feedb) equal_givens
    3.24    |> flat
    3.25  
    3.26 -(*  filter_variants': Model_Def.i_model_TEST -> Model_Def.variant -> Model_Def.i_model_TEST*)
    3.27 -fun filter_variants' i_singles n = 
    3.28 -  filter (fn (_, variants, _, _, _) => member op= variants n) i_singles
    3.29 -(*arrange_args: int list -> int * Model_Def.variant list -> (int * Model_Def.variant) list*)
    3.30 -fun arrange_args [] _ = []
    3.31 -  | arrange_args (sum :: ss) (cnt, all) = (sum, nth cnt all) :: (arrange_args ss (cnt + 1, all)) 
    3.32 -(*cnt_corrects: I_Model.T_TEST -> int*)
    3.33 -fun cnt_corrects i_model = 
    3.34 -  fold (curry op +) (map (fn (_, _, _, _, (Cor_TEST _, _)) => 1 | _ => 0) i_model) 0;
    3.35 -
    3.36 -(*get data wrt. maximal variant; NO Pre_Conds.check
    3.37 -  TODO: separate determining i_model(s!) with max_variant from creating environments;
    3.38 -    single i_model with max_variant can ONLY be determined Problem.mode + MethodC.model together.
    3.39 -*)
    3.40  (*T_TESTold*)
    3.41  fun of_max_variant _ [] = ((false, 0, []), [], ([], []))
    3.42    | of_max_variant model_patt i_model =
    3.43 @@ -292,7 +273,7 @@
    3.44          = length model_patt, max_variant, i_model_max),
    3.45        env_model, (env_subst, env_eval))
    3.46    end
    3.47 -(*T_TEST*)
    3.48 +(*T_TEST* \<longrightarrow> Model_Def)
    3.49  fun max_variants model_patt i_model =
    3.50      let
    3.51        val all_variants =
    3.52 @@ -308,7 +289,7 @@
    3.53          |> map snd
    3.54        val option_sequence = map 
    3.55          (fn (_, vnt) => if (member (op =) maxes vnt) then SOME vnt else NONE) sum_variant_s
    3.56 -(*das ist UNSINN .., siehe (*+*)if (pbl_max_imos*)
    3.57 +(*THAT IS NONSENSE, SEE Test_Theory (*+*)if (pbl_max_imos*)
    3.58        val max_i_models = map (fn (pos_in_sum_variant_s, i_model) =>
    3.59              if is_some pos_in_sum_variant_s then i_model else [])
    3.60            (option_sequence ~~ variants_separated)
    3.61 @@ -339,13 +320,7 @@
    3.62                               (env_model, (env_subst, env_eval)
    3.63  ( *\--fun make_envs_preconds: 1 max_i_model can be determined only together with meth --------/ *)
    3.64      end 
    3.65 -(*T_TESTnew*)
    3.66 -
    3.67 -(*T_TESTold*)
    3.68 -(*T_TEST*)
    3.69 -(*T_TESTnew*)
    3.70 -
    3.71 -
    3.72 +( *T_TESTnew*)
    3.73  
    3.74  
    3.75  (*extract the environment from an I_Model.of_max_variant*)
     4.1 --- a/test/Tools/isac/Minisubpbl/150a-add-given-Maximum.sml	Mon Sep 18 08:38:33 2023 +0200
     4.2 +++ b/test/Tools/isac/Minisubpbl/150a-add-given-Maximum.sml	Mon Sep 18 10:26:35 2023 +0200
     4.3 @@ -174,8 +174,8 @@
     4.4          |> flat
     4.5          |> distinct op =
     4.6      val variants_separated = map (filter_variants' i_model) all_variants
     4.7 -    val sums_corr = map (cnt_corrects) variants_separated
     4.8 -    val sum_variant_s = arrange_args sums_corr (1, all_variants)
     4.9 +    val sums_corr = map (Model_Def.cnt_corrects) variants_separated
    4.10 +    val sum_variant_s = Model_Def.arrange_args sums_corr (1, all_variants)
    4.11  (*+*)val [(0, 1), (0, 2), (0, 3)] = sum_variant_s
    4.12      val (_, max_variant) = hd (*..crude decision, up to improvement *)
    4.13        (sort (fn ((i, _), (j, _)) => int_ord (i, j)) sum_variant_s)
    4.14 @@ -564,8 +564,8 @@
    4.15          |> flat
    4.16          |> distinct op =
    4.17      val variants_separated = map (filter_variants' i_model) all_variants
    4.18 -    val sums_corr = map (cnt_corrects) variants_separated
    4.19 -    val sum_variant_s = arrange_args sums_corr (1, all_variants)
    4.20 +    val sums_corr = map (Model_Def.cnt_corrects) variants_separated
    4.21 +    val sum_variant_s = Model_Def.arrange_args sums_corr (1, all_variants)
    4.22      val (_, max_variant) = hd (*..crude decision, up to improvement *)
    4.23        (sort (fn ((i, _), (j, _)) => int_ord (i, j)) sum_variant_s)
    4.24      val i_model_max =
     5.1 --- a/test/Tools/isac/Minisubpbl/400-start-meth-subpbl.sml	Mon Sep 18 08:38:33 2023 +0200
     5.2 +++ b/test/Tools/isac/Minisubpbl/400-start-meth-subpbl.sml	Mon Sep 18 10:26:35 2023 +0200
     5.3 @@ -116,8 +116,8 @@
     5.4          |> flat
     5.5          |> distinct op =
     5.6      val variants_separated = map (filter_variants' i_model) all_variants
     5.7 -    val sums_corr = map (cnt_corrects) variants_separated
     5.8 -    val sum_variant_s = arrange_args sums_corr (1, all_variants)
     5.9 +    val sums_corr = map (Model_Def.cnt_corrects) variants_separated
    5.10 +    val sum_variant_s = Model_Def.arrange_args sums_corr (1, all_variants)
    5.11      val (_, max_variant) = hd (*..crude decision, up to improvement *)
    5.12        (sort (fn ((i, _), (j, _)) => int_ord (i, j)) sum_variant_s)
    5.13      val i_model_max =
     6.1 --- a/test/Tools/isac/Test_Theory.thy	Mon Sep 18 08:38:33 2023 +0200
     6.2 +++ b/test/Tools/isac/Test_Theory.thy	Mon Sep 18 10:26:35 2023 +0200
     6.3 @@ -71,7 +71,7 @@
     6.4  (**)open I_Model(**)
     6.5  \<close> ML \<open>
     6.6  \<close> ML \<open> (*\<longrightarrow> pre_conditions.sml | ? model-def.sml ?*)
     6.7 -fun max_variants model_patt i_model =
     6.8 +fun max_variants i_model =
     6.9      let
    6.10        val all_variants =
    6.11            map (fn (_, variants, _, _, _) => variants) i_model
    6.12 @@ -118,7 +118,7 @@
    6.13  ( *\--fun make_envs_preconds: 1 max_i_model can be determined only together with meth --------/ *)
    6.14      end 
    6.15  ;
    6.16 -max_variants: Model_Pattern.T -> Model_Def.i_model_TEST ->
    6.17 +max_variants: Model_Def.i_model_TEST ->
    6.18         (variant list * Model_Def.i_model_TEST list)(* * Env.T * (env_subst * env_eval)*)
    6.19  \<close> ML \<open>
    6.20  \<close> ML \<open> (*\<longrightarrow> pre-conditions.sml*)
    6.21 @@ -176,7 +176,7 @@
    6.22  \<close> ML \<open>
    6.23  fun fill_method o_model pbl_imod met_patt =
    6.24    let
    6.25 -    val (pbl_max_vnts, _) = max_variants met_patt pbl_imod;
    6.26 +    val (pbl_max_vnts, _) = max_variants pbl_imod;
    6.27      val from_pbl = map (fn (_, (descr, _)) => get_descr_vnt descr pbl_max_vnts pbl_imod) met_patt
    6.28      val from_o_model = map ((fn i_single as (_, _, _, _, (feedb, _)) =>
    6.29        if is_empty_single_TEST i_single
    6.30 @@ -1188,7 +1188,7 @@
    6.31  (*new below step into*)
    6.32  
    6.33  val return_max_variants =
    6.34 -(*I_Model.*)max_variants met_patt pbl_imod;
    6.35 +(*I_Model.*)max_variants pbl_imod;
    6.36  \<close> ML \<open> (*////--------- step into max_variants ----------------------------------------------\\*)
    6.37  (*////---------------- step into max_variants ----------------------------------------------\\*)
    6.38  "~~~~~ fun max_variants , args:"; val (model_patt, i_model) = (pbl_patt, pbl_imod);
    6.39 @@ -1267,7 +1267,7 @@
    6.40  \<close> ML \<open> (*|||---------- continue fill_method --------------------------------------------------*)
    6.41  (*|||----------------- continue fill_method --------------------------------------------------*)
    6.42  \<close> ML \<open>
    6.43 -      val (pbl_max_vnts, pbl_max_imos) = (*I_Model.*)max_variants pbl_patt pbl_imod
    6.44 +      val (pbl_max_vnts, pbl_max_imos) = (*I_Model.*)max_variants  pbl_imod
    6.45  ;
    6.46  (*+*)val [2, 1] = pbl_max_vnts;
    6.47  (*-------pbl_max_imos is NONSENSE (*+*)if (pbl_max_imos ..*)