src/Tools/isac/Interpret/li-tool.sml
changeset 60777 df8636ffd6f8
parent 60771 1b072aab8f4e
child 60782 e797d1bdfe37
     1.1 --- a/src/Tools/isac/Interpret/li-tool.sml	Sun Dec 10 07:56:02 2023 +0100
     1.2 +++ b/src/Tools/isac/Interpret/li-tool.sml	Sun Dec 10 17:35:07 2023 +0100
     1.3 @@ -27,11 +27,9 @@
     1.4    val tac_from_prog: Ctree.state -> term -> Tactic.input
     1.5  
     1.6  (*from isac_test for Minisubpbl*)
     1.7 -  val arguments_from_model : Proof.context -> MethodC.id -> I_Model.T -> term list
     1.8 +  val arguments_from_model: Proof.context -> MethodC.id -> I_Model.T_POS -> term list
     1.9    val errmsg: string
    1.10 -  val error_msg_2: Proof.context -> term -> I_Model.T -> string
    1.11 -  val error_msg_2_POS: Proof.context -> term -> I_Model.T_POS -> string
    1.12 -  val error_msg_1: string
    1.13 +  val error_msg: string
    1.14    val relate_args: Env.T -> term list -> term list -> Proof.context -> Program.term ->
    1.15      MethodC.id -> term list -> term list -> (term * term) list
    1.16  
    1.17 @@ -57,24 +55,19 @@
    1.18      Option.map (subst_atomic env) (Prog_Tac.get_first_argument prog)
    1.19    | implicit_take _ _ _ = raise ERROR "implicit_take: no match";
    1.20  
    1.21 -val error_msg_1 = "ERROR: the guard is missing (#model in 'type met' added in prep_met)."
    1.22 -fun error_msg_2 ctxt d itms =
    1.23 -  ("arguments_from_model: '" ^ UnparseC.term ctxt d ^ "' not in itms:\n" ^
    1.24 -  "itms:\n" ^ I_Model.to_string @{context} itms)
    1.25 -fun error_msg_2_POS ctxt d itms =
    1.26 -  ("arguments_from_model: '" ^ UnparseC.term ctxt d ^ "' not in itms:\n" ^
    1.27 -  "itms:\n" ^ I_Model.to_string_POS @{context} itms)
    1.28 +val error_msg = "ERROR: the guard is missing (#model in 'type met' added in prep_met)."
    1.29  (* turn Model-items into arguments for a program *)
    1.30 -fun arguments_from_model ctxt mI itms =
    1.31 +fun arguments_from_model ctxt met_id i_model =
    1.32    let
    1.33 -    val mvat = Pre_Conds.max_variant itms
    1.34 -    fun okv mvat (_, vats, b, _, _) = member op = vats mvat andalso b
    1.35 -    val itms = filter (okv mvat) itms
    1.36 -    fun itm2arg _ (_, (_, _)) = [](*this limits errors to init_pstate,
    1.37 -      while changing I_Model.penvval_in triggers much more errors*)
    1.38 -    val pats = (#model o MethodC.from_store ctxt) mI
    1.39 -    val _ = if pats = [] then raise ERROR error_msg_1 else ()
    1.40 -  in (flat o (map (itm2arg itms))) pats end;
    1.41 +    val {model = met_patt, ...} = MethodC.from_store ctxt met_id
    1.42 +    val max_vnt = Model_Def.max_variants'' i_model |> last_elem
    1.43 +  in
    1.44 +    i_model
    1.45 +      |> filter (fn (_, vnts, _, _, _) => member_swap op = max_vnt vnts)
    1.46 +      |> I_Model.order_by_patt met_patt
    1.47 +      |> I_Model.get_values
    1.48 +      |> map Model_Def.values_to_present
    1.49 +  end
    1.50  
    1.51  (*
    1.52    convert a Prog_Tac to Tactic.input;