src/Tools/isac/Interpret/istate.sml
author wneuper <Walther.Neuper@jku.at>
Thu, 04 Aug 2022 12:48:37 +0200
changeset 60509 2e0b7ca391dc
parent 60500 59a3af532717
child 60543 9555ee96e046
permissions -rw-r--r--
polish naming in Rewrite_Order
wneuper@59572
     1
(* Title:  interpreter-state for Lucas-Interpretation
wneuper@59572
     2
   Author: Walther Neuper 190724
wneuper@59572
     3
   (c) due to copyright terms
wneuper@59572
     4
*)
wneuper@59572
     5
signature INTERPRETER_STATE =
wneuper@59572
     6
sig
wneuper@59572
     7
walther@59737
     8
  datatype asap = datatype Istate_Def.asap
walther@59777
     9
  val asap2str: asap -> string 
walther@59737
    10
  type pstate = Istate_Def.pstate
walther@59777
    11
  val e_pstate: pstate
walther@59777
    12
  val pstate2str: pstate -> string
wneuper@59572
    13
walther@59737
    14
  datatype T = datatype Istate_Def.T
walther@59846
    15
  val empty: T
walther@59844
    16
  val string_of: T -> string
walther@59844
    17
  val string_of': T -> string
walther@59664
    18
  val istates2str: T option * T option -> string
walther@59685
    19
  val the_pstate: T -> pstate
wneuper@59572
    20
walther@59935
    21
  val init_detail: Tactic.input -> term -> Istate_Def.T
walther@59935
    22
walther@59667
    23
  val get_act_env: pstate -> (term * Env.T)
walther@59667
    24
  val get_subst: pstate -> (Env.T * (term option * term))
walther@59660
    25
walther@59784
    26
  val trans_scan_dn: pstate -> pstate
walther@59783
    27
  val trans_scan_up: pstate -> pstate
walther@59667
    28
  val trans_ass: pstate -> pstate -> pstate
walther@59667
    29
  val trans_env_act: pstate -> pstate -> pstate
walther@59659
    30
walther@59767
    31
  val path_down: TermC.path -> pstate -> pstate
walther@59767
    32
  val path_down_form: (TermC.path * term) -> pstate -> pstate
walther@59767
    33
  val path_up': TermC.path -> TermC.path
walther@59667
    34
  val path_up: pstate -> pstate
walther@59767
    35
  val path_up_down: TermC.path -> pstate -> pstate
walther@59660
    36
walther@59698
    37
  val set_form: term -> pstate -> pstate
walther@59767
    38
  val set_path: TermC.path -> pstate -> pstate
walther@59851
    39
  val set_eval: Rule_Set.T -> pstate -> pstate
walther@59698
    40
  val set_act: term -> pstate -> pstate
walther@59698
    41
  val set_or: asap -> pstate -> pstate
walther@59785
    42
  val set_found: pstate -> pstate
walther@59698
    43
walther@59698
    44
  val set_subst: Env.T -> (term * term) -> pstate -> pstate
walther@59709
    45
  val set_subst': (term * term) -> pstate -> pstate
walther@59698
    46
  val set_subst_true: (term option * term) -> pstate -> pstate
walther@59698
    47
  val set_subst_false: (term option * term) -> pstate -> pstate
walther@59782
    48
  val set_subst_found: (term option * term) -> pstate -> pstate
walther@59698
    49
walther@59698
    50
  val set_env: Env.T -> pstate -> pstate
walther@59698
    51
  val set_env_true: Env.T -> pstate -> pstate
walther@59698
    52
  val set_form_env: (term * Env.T) -> pstate -> pstate
walther@59698
    53
  val set_act_env: (term * Env.T) -> pstate -> pstate
walther@59698
    54
  val upd_env: term -> pstate -> pstate
walther@59698
    55
  val upd_env': Env.T * (term * term) -> pstate -> pstate
walther@59709
    56
  val upd_env'': (term * term) -> pstate -> pstate
walther@59659
    57
wneuper@59572
    58
end
wneuper@59572
    59
walther@59668
    60
(**)                   
wneuper@59572
    61
structure Istate(**): INTERPRETER_STATE(**) =
wneuper@59572
    62
struct
walther@59659
    63
(**)
wneuper@59572
    64
walther@59935
    65
(** types **)
walther@59935
    66
walther@59737
    67
datatype asap = datatype Istate_Def.asap
walther@59777
    68
val asap2str = Istate_Def.asap2str
walther@59680
    69
walther@59737
    70
type pstate = Istate_Def.pstate
walther@59777
    71
val e_pstate = Istate_Def.e_pstate
walther@59777
    72
val pstate2str = Istate_Def.pstate2str
wneuper@59572
    73
walther@59737
    74
datatype T = datatype Istate_Def.T
walther@59846
    75
val empty = Istate_Def.empty
walther@59685
    76
fun the_pstate (Pstate pst) = pst
walther@59685
    77
  | the_pstate _ = raise ERROR ("the_pstate called for RrlsStated")
wneuper@59572
    78
walther@59935
    79
walther@59935
    80
(** access functions **)
walther@59935
    81
walther@59844
    82
val string_of = Istate_Def.string_of
walther@59844
    83
val string_of' = Istate_Def.string_of'
walther@59777
    84
val istates2str = Istate_Def.istates2str
wneuper@59572
    85
walther@59682
    86
fun get_act_env {env, act_arg, ...} = (act_arg, env)
walther@59682
    87
fun get_subst {env, form_arg, act_arg, ...} = (env, (form_arg, act_arg))
walther@59659
    88
walther@59784
    89
fun trans_scan_dn {env, eval, act_arg, or, found_accept, ...}  = 
walther@59767
    90
  {env = env, path = [TermC.R], eval = eval, form_arg = NONE, act_arg = act_arg,
walther@59784
    91
    or = or, found_accept = found_accept, assoc = false}
walther@59784
    92
fun trans_scan_up {env, path, eval, form_arg, act_arg, or, found_accept, ...}  = 
walther@59682
    93
  {env = env, path = path, eval = eval, form_arg = form_arg, act_arg = act_arg,
walther@59784
    94
    or = or, found_accept = found_accept, assoc = false(*the only update*)}
walther@59784
    95
fun trans_ass {assoc, ...} {env, path, eval, form_arg, act_arg, or, found_accept, ...} = 
walther@59682
    96
  {env = env, path = path, eval = eval, form_arg = form_arg, act_arg = act_arg,
walther@59784
    97
    or = or, found_accept = found_accept, assoc = assoc}
walther@59784
    98
fun trans_env_act {env, act_arg, ...} {path, eval, form_arg, or, found_accept, assoc, ...} = 
walther@59682
    99
  {env = env, path = path, eval = eval, form_arg = form_arg, act_arg = act_arg,
walther@59784
   100
    or = or, found_accept = found_accept, assoc = assoc}
walther@59660
   101
walther@59784
   102
fun path_down p {env, path, eval, form_arg, act_arg, or, found_accept, assoc} =
walther@59682
   103
  {env = env, path = path @ p, eval = eval, form_arg = form_arg, act_arg = act_arg,
walther@59784
   104
    or = or, found_accept = found_accept, assoc = assoc}
walther@59784
   105
fun path_down_form (p, fa) {env, path, eval, act_arg, or, found_accept, assoc, ...} =
walther@59682
   106
  {env = env, path = path @ p, eval = eval, form_arg = SOME fa, act_arg = act_arg,
walther@59784
   107
    or = or, found_accept = found_accept, assoc = assoc}
walther@59723
   108
fun path_up' [] = raise ERROR "path_up' []"
walther@59723
   109
  | path_up' path = drop_last path
walther@59784
   110
fun path_up {env, path, eval, form_arg, act_arg, or, found_accept, assoc} =
walther@59723
   111
  {env = env, path = path_up' path, eval = eval, form_arg = form_arg, act_arg = act_arg,
walther@59784
   112
    or = or, found_accept = found_accept, assoc = assoc}
walther@59784
   113
fun path_up_down p {env, path, eval, form_arg, act_arg, or, found_accept, assoc} =
walther@59723
   114
  {env = env, path = (path_up' path) @ p, eval = eval, form_arg = form_arg, act_arg = act_arg,
walther@59784
   115
    or = or, found_accept = found_accept, assoc = assoc}
walther@59664
   116
walther@59784
   117
fun set_form f {env, path, eval, act_arg, or, found_accept, assoc, ...} =
walther@59682
   118
  {env = env, path = path, eval = eval, form_arg = SOME f, act_arg = act_arg,
walther@59784
   119
    or = or, found_accept = found_accept, assoc = assoc}
walther@59784
   120
fun set_path p {env, eval, form_arg, act_arg, or, found_accept, assoc, ...} =
walther@59682
   121
  {env = env, path = p, eval = eval, form_arg = form_arg, act_arg = act_arg,
walther@59784
   122
    or = or, found_accept = found_accept, assoc = assoc}
walther@59737
   123
val set_eval = Istate_Def.set_eval
walther@59737
   124
val set_act = Istate_Def.set_act
walther@59784
   125
fun set_or or {env, path, eval, form_arg, act_arg, found_accept, assoc, ...} =
walther@59684
   126
  {env = env, path = path, eval = eval, form_arg = form_arg, act_arg = act_arg,
walther@59784
   127
    or = or, found_accept = found_accept, assoc = assoc}
walther@59785
   128
fun set_found {env, path, eval, form_arg, act_arg, or, assoc, ...} =
walther@59682
   129
  {env = env, path = path, eval = eval, form_arg = form_arg, act_arg = act_arg,
walther@59784
   130
    or = or, found_accept = true, assoc = assoc}
walther@59664
   131
walther@59784
   132
fun set_subst env (form_arg, act_arg) {path, eval, or, found_accept, assoc, ...} =
walther@59698
   133
  {env = env, path = path, eval = eval, form_arg = SOME form_arg, act_arg = act_arg,
walther@59784
   134
    or = or, found_accept = found_accept, assoc = assoc}
walther@59784
   135
fun set_subst' (form_arg, act_arg) {env, path, eval, or, found_accept, assoc, ...} =
walther@59709
   136
  {env = env, path = path, eval = eval, form_arg = SOME form_arg, act_arg = act_arg,
walther@59784
   137
    or = or, found_accept = found_accept, assoc = assoc}
walther@59784
   138
fun set_subst_true (form_arg, act_arg) {env, path, eval, or, found_accept, ...} =
walther@59698
   139
  {env = env, path = path, eval = eval, form_arg = form_arg, act_arg = act_arg,
walther@59784
   140
    or = or, found_accept = found_accept, assoc = true}
walther@59784
   141
fun set_subst_false (form_arg, act_arg) {env, path, eval, or, found_accept, ...} =
walther@59698
   142
  {env = env, path = path, eval = eval, form_arg = form_arg, act_arg = act_arg,
walther@59784
   143
    or = or, found_accept = found_accept, assoc = false}
walther@59782
   144
fun set_subst_found (form_arg, act_arg) {env, path, eval, ...} =
walther@59698
   145
  {env = env, path = path, eval = eval, form_arg = form_arg, act_arg = act_arg,
walther@59784
   146
    or = ORundef, found_accept = true, assoc = false}
walther@59698
   147
walther@59784
   148
fun set_env env {path, eval, form_arg, act_arg, or, found_accept, assoc, ...} =
walther@59682
   149
  {env = env, path = path, eval = eval, form_arg = form_arg, act_arg = act_arg,
walther@59784
   150
    or = or, found_accept = found_accept, assoc = assoc}
walther@59737
   151
val set_env_true = Istate_Def.set_env_true
walther@59784
   152
fun set_form_env (form_arg, env) {path, eval, act_arg, or, found_accept, assoc, ...} =
walther@59698
   153
  {env = env, path = path, eval = eval, form_arg = SOME form_arg, act_arg = act_arg,
walther@59784
   154
    or = or, found_accept = found_accept, assoc = assoc}
walther@59784
   155
fun set_act_env (act_arg, env) {path, eval, form_arg, or, found_accept, assoc, ...} =
walther@59698
   156
  {env = env, path = path, eval = eval, form_arg = form_arg, act_arg = act_arg,
walther@59784
   157
    or = or, found_accept = found_accept, assoc = assoc}
walther@59784
   158
fun upd_env form {env, path, eval, form_arg, act_arg, or, found_accept, assoc} =
walther@59697
   159
  {env = Env.update env (form, act_arg), path = path, eval = eval, form_arg = form_arg,
walther@59784
   160
    act_arg = act_arg, or = or, found_accept = found_accept, assoc = assoc}
walther@59784
   161
fun upd_env' (env, (form, act)) {path, eval, or, found_accept, assoc, ...} =
walther@59697
   162
  {env = Env.update env (form, act), path = path, eval = eval, form_arg = SOME form, act_arg = act,
walther@59784
   163
    or = or, found_accept = found_accept, assoc = assoc}
walther@59784
   164
fun upd_env'' (form, act) {env, path, eval, or, found_accept, assoc, ...} =
walther@59709
   165
  {env = Env.update env (form, act), path = path, eval = eval, form_arg = SOME form, act_arg = act,
walther@59784
   166
    or = or, found_accept = found_accept, assoc = assoc}
walther@59682
   167
walther@59935
   168
(* initialize istate for Detail_Set *)
walther@59935
   169
fun init_detail (Tactic.Rewrite_Set rls) t =
walther@59935
   170
    let
walther@59935
   171
      val thy = ThyC.get_theory "Isac_Knowledge"
walther@59935
   172
      val args = Auto_Prog.gen thy t (assoc_rls rls) |> Program.formal_args
walther@59935
   173
    in
walther@59935
   174
      Istate_Def.Pstate (Istate_Def.e_pstate |> Istate_Def.set_env_true [(hd args, t)])
walther@59935
   175
    end
walther@59935
   176
  | init_detail (Tactic.Rewrite_Set_Inst (subs, rls)) t =
walther@59935
   177
    let
Walther@60500
   178
      val ctxt = Proof_Context.init_global (ThyC.get_theory "Isac_Knowledge")
walther@59935
   179
      val rls' = assoc_rls rls
Walther@60500
   180
      val v = case Subst.T_from_input ctxt subs of
walther@59935
   181
        (_, v) :: _ => v (*...we suppose the substitution of only ONE bound variable*)
walther@59935
   182
      | _ => raise ERROR "init_detail: uncovered case"
Walther@60500
   183
      val prog = Auto_Prog.gen (Proof_Context.theory_of ctxt) t rls'
walther@59935
   184
      val args = Program.formal_args prog
walther@59935
   185
    in
walther@59935
   186
      Istate_Def.Pstate (Istate_Def.e_pstate |> Istate_Def.set_env_true (args ~~ [t, v]))
walther@59935
   187
    end
walther@59935
   188
  | init_detail tac _ = raise ERROR ("init_detail: uncovered definition for " ^ Tactic.input_to_string tac)
walther@59935
   189
walther@59935
   190
(** initialisation **)
walther@59935
   191
walther@59935
   192
wneuper@59572
   193
walther@59674
   194
(**)end(**)
wneuper@59572
   195