src/Tools/isac/Interpret/derive.sml
changeset 59932 87336f3b021f
parent 59907 4c62e16e842e
child 59934 955d6fa8bb9b
     1.1 --- a/src/Tools/isac/Interpret/derive.sml	Sat May 02 17:39:04 2020 +0200
     1.2 +++ b/src/Tools/isac/Interpret/derive.sml	Mon May 04 09:25:51 2020 +0200
     1.3 @@ -21,6 +21,7 @@
     1.4  (*val concat_deriv *)
     1.5    val steps : Rule_Def.rew_ord -> Rule_Set.T -> Rule.rule list -> term -> term ->
     1.6      bool * der list
     1.7 +  val embed: State_Steps.T -> Calc.T -> Pos.pos' list * Calc.T
     1.8  (* ---- for tests only: shifted from below to remove the Warning "unused" at fun.def. --------- *)
     1.9    (*  NONE *)
    1.10  (*/-------------------------------------------------------- ! aktivate for Test_Isac BEGIN ---\* )
    1.11 @@ -141,4 +142,44 @@
    1.12        else (false, [])
    1.13    end
    1.14  
    1.15 +(* embed the tacis created by a '_deriv'ation; sys.form <> input.form
    1.16 +  tacis are in order, thus are reverted for generate *)
    1.17 +fun embed tacis (pt, pos as (p, Pos.Frm)) =
    1.18 +  (*inform at Frm: replace the whole PrfObj by a Transitive-ProfObj FIXME?0402
    1.19 +    and transfer the istate (from _after_ compare_deriv) from Frm to Res*)
    1.20 +    let
    1.21 +      val (res, asm) = (State_Steps.result o last_elem) tacis
    1.22 +    	val (ist, ctxt) = case Ctree.get_obj Ctree.g_loc pt p of
    1.23 +    	  (SOME (ist, ctxt), _) => (ist, ctxt)
    1.24 +      | (NONE, _) => error "Derive.embed Frm: uncovered case get_obj"
    1.25 +    	val form =  Ctree.get_obj  Ctree.g_form pt p
    1.26 +      (*val p = lev_on p; ---------------only difference to (..,Res) below*)
    1.27 +    	val tacis = (Tactic.Begin_Trans, Tactic.Begin_Trans' form, (pos, (Istate_Def.Uistate, ctxt))) ::
    1.28 +    		(State_Steps.insert_pos ((Pos.lev_on o Pos.lev_dn) p) tacis) @ [(Tactic.End_Trans, Tactic.End_Trans' (res, asm),
    1.29 +    			(Pos.pos_plus (length tacis) (Pos.lev_dn p, Pos.Res), (Ctree.new_val res ist, ctxt)))]
    1.30 +    	val {nrls, ...} = Specify.get_met (Ctree.get_obj Ctree.g_metID pt (Ctree.par_pblobj pt p))
    1.31 +    	val (pt, c, pos as (p, _)) = Solve_Step.s_add_general (rev tacis) (pt, [], (p, Pos.Res))
    1.32 +    	val pt = Ctree.update_tac pt p (Tactic.Derive (Rule_Set.id nrls))
    1.33 +    	val pt = Ctree.update_branch pt p Ctree.TransitiveB
    1.34 +    in (c, (pt, pos)) end
    1.35 +  | embed tacis (pt, (p, Pos.Res)) =
    1.36 +    (*inform at Res: append a Transitive-PrfObj FIXME?0402 other branch-types ?
    1.37 +      and transfer the istate (from _after_ compare_deriv) from Res to new Res*)
    1.38 +    let
    1.39 +      val (res, asm) = (State_Steps.result o last_elem) tacis
    1.40 +    	val (ist, ctxt) = case Ctree.get_obj Ctree.g_loc pt p of
    1.41 +    	  (_, SOME (ist, ctxt)) => (ist, ctxt)
    1.42 +      | (_, NONE) => error "Derive.embed Frm: uncovered case get_obj"
    1.43 +    	val (f, _) = Ctree.get_obj Ctree.g_result pt p
    1.44 +    	val p = Pos.lev_on p(*---------------only difference to (..,Frm) above*);
    1.45 +    	val tacis = (Tactic.Begin_Trans, Tactic.Begin_Trans' f, ((p, Pos.Frm), (Istate_Def.Uistate, ctxt))) ::
    1.46 +    		(State_Steps.insert_pos ((Pos.lev_on o Pos.lev_dn) p) tacis) @ [(Tactic.End_Trans, Tactic.End_Trans' (res, asm), 
    1.47 +    			(Pos.pos_plus (length tacis) (Pos.lev_dn p, Pos.Res), (Ctree.new_val res ist, ctxt)))];
    1.48 +    	val {nrls, ...} = Specify.get_met (Ctree.get_obj Ctree.g_metID pt (Ctree.par_pblobj pt p))
    1.49 +    	val (pt, c, pos as (p, _)) = Solve_Step.s_add_general (rev tacis) (pt, [], (p, Pos.Res))
    1.50 +    	val pt = Ctree.update_tac pt p (Tactic.Derive (Rule_Set.id nrls))
    1.51 +    	val pt = Ctree.update_branch pt p Ctree.TransitiveB
    1.52 +    in (c, (pt, pos)) end
    1.53 +  | embed _ _ = error "Derive.embed: uncovered definition"
    1.54 +
    1.55  (**)end(**)