walther@59908: (* Title: TODO/state-step.sml walther@59908: Author: Walther Neuper walther@59908: (c) due to copyright terms walther@59908: walther@59908: Deprecated; the idea was to hold steps complete such, that they can be replayed. walther@59908: *) walther@59908: walther@59908: signature STATE_STEPS = walther@59908: sig walther@59908: type single walther@59908: val single_empty : single walther@59908: type T walther@59908: val to_string : T -> string walther@59908: val result : single -> (term * term list) Walther@60509: val make_single: Rewrite_Ord.id * 'a -> Rule_Set.T -> term * Rule.rule * (term * term list) -> walther@59931: single walther@59908: val insert_pos : Pos.pos -> T -> T walther@59908: end walther@59908: walther@59908: (**) walther@59908: structure State_Steps(**): STATE_STEPS(**) = walther@59908: struct walther@59908: (**) walther@59908: walther@59908: (* a single holds alle information required to build a node in the calc-tree; walther@59908: a single is assumed to be used efficiently such that the calc-tree walther@59908: resulting from applying a single need not be stored separately; walther@59981: see "type Calc.state_pre" *) walther@59908: (*TODO.WN0504 redesign ??? or redesign generate ?? see "fun generate" walther@59908: TODO.WN0512 ? redesign this _list_: walther@59908: # only used for [Apply_Method + (Take or Subproblem)], i.e. for initacs walther@59908: # the latter problem may be resolved automatically if "fun autocalc" is walther@59908: not any more used for the specify-phase and for changing the phases*) walther@59908: type single = walther@59908: (Tactic.input * (* for comparison with input tac *) walther@59908: Tactic.T * (* for ctree generation *) walther@59908: (Pos.pos' * (* after applying tac_, for ctree generation *) walther@59908: (Istate_Def.T * Proof.context))) (* after applying tac_, for ctree generation *) walther@59908: val single_empty = (Tactic.Empty_Tac, Tactic.Empty_Tac_, (Pos.e_pos', (Istate_Def.empty, ContextC.empty))): single walther@59908: fun taci2str ((tac, tac_, (pos', (istate, _))):single) = walther@59908: "( " ^ Tactic.input_to_string tac ^ ", " ^ Tactic.string_of tac_ ^ ", ( " ^ Pos.pos'2str pos' ^ ", " ^ walther@59908: Istate_Def.string_of istate ^ " ))" walther@59908: walther@59908: type T = single list; walther@59908: walther@59908: fun to_string tacis = (strs2str o (map (linefeed o taci2str))) tacis walther@59908: fun result (_, Tactic.Rewrite' (_, _, _, _, _, _,(res, asm)), _) = (res, asm) walther@59908: | result (_, Tactic.Rewrite_Set' (_, _, _, _, (res, asm)), _) = (res, asm) walther@59962: | result (_, tac_, _) = raise ERROR ("result: called with" ^ Tactic.string_of tac_) walther@59914: walther@59908: fun make_single ro erls (t, r as Rule.Thm (id, thm), (t', a)) = walther@59908: (Tactic.Rewrite (id, thm), walther@59908: Tactic.Rewrite' ("Isac_Knowledge", fst ro, erls, false, ThmC.from_rule r, t, (t', a)), walther@59908: (Pos.e_pos'(*to be updated before generate tacis!!!*), (Istate_Def.Uistate, ContextC.empty))) walther@59908: | make_single _ _ (t, r as Rule.Rls_ rls, (t', a)) = walther@59908: (Tactic.Rewrite_Set (Rule_Set.id_from_rule r), walther@59908: Tactic.Rewrite_Set' ("Isac_Knowledge", false, rls, t, (t', a)), walther@59908: (Pos.e_pos'(*to be updated before generate tacis!!!*), (Istate_Def.Uistate, ContextC.empty))) walther@59962: | make_single _ _ (t, r, _) = raise ERROR ("make_single: not impl. for " ^ Rule.to_string r ^ " at " ^ UnparseC.term t) walther@59908: walther@59908: (* update pos in tacis for embedding by generate *) walther@59908: fun insert_pos (_: Pos.pos) [] = [] walther@59908: | insert_pos (p: Pos.pos) (((tac, tac_, (_, ist)): single) :: tacis) = walther@59908: ((tac, tac_, ((p, Pos.Res), ist)): single) :: (insert_pos (Pos.lev_on p) tacis) walther@59908: walther@59908: (**)end(**) walther@59908: