src/Tools/isac/Interpret/generate.sml
changeset 59267 aab874fdd910
parent 59266 56762e8a672e
child 59268 c988bdecd7be
equal deleted inserted replaced
59266:56762e8a672e 59267:aab874fdd910
     8   val e_taci : taci
     8   val e_taci : taci
     9   datatype edit = EdUndef | Protect | Write
     9   datatype edit = EdUndef | Protect | Write
    10   eqtype indent
    10   eqtype indent
    11   datatype nest = Closed | Nundef | Open
    11   datatype nest = Closed | Nundef | Open
    12   datatype pblmet = Method of metID | Problem of pblID | Upblmet
    12   datatype pblmet = Method of metID | Problem of pblID | Upblmet
    13   datatype inout
    13   datatype inout =
    14   = Error_ of string | FormKF of cellID * edit * indent * nest * cterm'
    14      Error_ of string
    15      | PpcKF of cellID * edit * indent * nest * (pblmet * item ppc) | RefineKF of match list
    15   | FormKF of cellID * edit * indent * nest * cterm'
    16      | RefinedKF of pblID * (itm list * (bool * term) list)
    16   | PpcKF of cellID * edit * indent * nest * (pblmet * item ppc) 
       
    17   | RefineKF of match list
       
    18   | RefinedKF of pblID * (itm list * (bool * term) list)
    17   datatype mout = EmptyMout | Error' of inout | Form' of inout | Problems of inout
    19   datatype mout = EmptyMout | Error' of inout | Form' of inout | Problems of inout
    18   val generate1 : theory -> tac_ -> istate * Proof.context ->
    20   val generate1 : theory -> tac_ -> istate * Proof.context ->
    19     posel list * pos_ -> ptree -> pos' * pos' list * mout * ptree
    21     posel list * pos_ -> ptree -> pos' * pos' list * mout * ptree
    20   val init_pbl : (string * (term * 'a)) list -> itm list
    22   val init_pbl : (string * (term * 'a)) list -> itm list
    21   val init_pbl' : (string * (term * term)) list -> itm list
    23   val init_pbl' : (string * (term * term)) list -> itm list
    36 (*/-------------------------------------------------------- ! aktivate for Test_Isac BEGIN ---\* )
    38 (*/-------------------------------------------------------- ! aktivate for Test_Isac BEGIN ---\* )
    37 ( *\--- ! aktivate for Test_Isac END ----------------------------------------------------------/*)
    39 ( *\--- ! aktivate for Test_Isac END ----------------------------------------------------------/*)
    38 end
    40 end
    39 
    41 
    40 (**)
    42 (**)
    41 structure Ctree(**): CALC_TREE(**) =
    43 structure Ctree(*: CALC_TREE*) =
    42 (**)
    44 (**)
    43 struct
    45 struct
    44 (* initialize istate for Detail_Set *)
    46 (* initialize istate for Detail_Set *)
    45 fun init_istate (Rewrite_Set rls) t =
    47 fun init_istate (Rewrite_Set rls) t =
    46     (case assoc_rls rls of
    48     (case assoc_rls rls of
   151 	       ^(pblmet2str pm)^","^(itemppc2str itemppc)^"))"
   153 	       ^(pblmet2str pm)^","^(itemppc2str itemppc)^"))"
   152   | inout2str (RefineKF ms)  = "RefineKF "^(matchs2str ms)
   154   | inout2str (RefineKF ms)  = "RefineKF "^(matchs2str ms)
   153   | inout2str _ = error "inout2str: uncovered definition"
   155   | inout2str _ = error "inout2str: uncovered definition"
   154 fun inouts2str ios = (strs2str' o (map inout2str)) ios
   156 fun inouts2str ios = (strs2str' o (map inout2str)) ios
   155 
   157 
       
   158 (*
       
   159   datatype mout = EmptyMout | Error' of inout | Form' of inout | Problems of inout
       
   160 *)
   156 datatype mout =
   161 datatype mout =
   157   Form' of inout         (* packing cterm' | cterm' ppc *)
   162   FormKF of cterm'
   158 | Problems of inout      (* passes specify (and solve)  *)
   163 | PpcKF of (pblmet * item ppc) 
   159 | Error' of inout
   164 | RefinedKF of pblID * (itm list * (bool * term) list)
   160 | EmptyMout;
   165 | Error' of string
   161 
   166 | EmptyMout
   162 fun mout2str (Form' inout) ="Form' "^(inout2str inout)
   167 
   163   | mout2str (Error'  inout) ="Error' "^(inout2str inout)
   168 fun mout2str (FormKF cterm') = "FormKF " ^ cterm'
   164   | mout2str (EmptyMout    ) ="EmptyMout"
   169   | mout2str (PpcKF  (pm, itemppc)) = "PpcKF (" ^ pblmet2str pm ^ "," ^ itemppc2str itemppc ^ ")"
   165   | mout2str _ = error "mout2str: uncovered definition"
   170   | mout2str (RefinedKF  (pblID, ls)) = "mout2str: RefinedKF not impl."
       
   171   | mout2str (Error'  str) = "Error' " ^ str
       
   172   | mout2str (EmptyMout    ) = "EmptyMout"
   166 
   173 
   167 (* init pbl with ...,dsc,empty | [] *)
   174 (* init pbl with ...,dsc,empty | [] *)
   168 fun init_pbl pbt = 
   175 fun init_pbl pbt = 
   169   let
   176   let
   170     fun pbt2itm (f, (d, _)) = ((0, [], false, f, Inc ((d, []), (e_term, []))) : itm)
   177     fun pbt2itm (f, (d, _)) = ((0, [], false, f, Inc ((d, []), (e_term, []))) : itm)
   177   in map pbt2itm pbt end
   184   in map pbt2itm pbt end
   178 
   185 
   179 (*generate 1 ppobj in ptree*)
   186 (*generate 1 ppobj in ptree*)
   180 (*TODO.WN0501: take calcstate as an argument (see embed_derive etc.)?specify?*)
   187 (*TODO.WN0501: take calcstate as an argument (see embed_derive etc.)?specify?*)
   181 fun generate1 thy (Add_Given' (_, itmlist)) _ (pos as (p, p_)) pt = 
   188 fun generate1 thy (Add_Given' (_, itmlist)) _ (pos as (p, p_)) pt = 
   182     (pos:pos',[],Form' (PpcKF (0, EdUndef, 0, Nundef, (Upblmet, itms2itemppc thy [][]))),
   189     (pos: pos', [], PpcKF (Upblmet, itms2itemppc thy [][]),
   183        case p_ of
   190        case p_ of
   184          Pbl => update_pbl pt p itmlist
   191          Pbl => update_pbl pt p itmlist
   185 	     | Met => update_met pt p itmlist
   192 	     | Met => update_met pt p itmlist
   186        | _ => error ("uncovered case " ^ pos_2str p_))
   193        | _ => error ("uncovered case " ^ pos_2str p_))
   187     (* WN110515 probably declare_constraints with input item (without dsc) --
   194     (* WN110515 probably declare_constraints with input item (without dsc) --
   188       -- important when specifying without formalisation *)
   195       -- important when specifying without formalisation *)
   189   | generate1 thy (Add_Find' (_, itmlist)) _ (pos as (p, p_)) pt = 
   196   | generate1 thy (Add_Find' (_, itmlist)) _ (pos as (p, p_)) pt = 
   190     (pos, [], Form' (PpcKF (0, EdUndef, 0, Nundef, (Upblmet, itms2itemppc thy [] []))),
   197     (pos, [], (PpcKF (Upblmet, itms2itemppc thy [] [])),
   191        case p_ of
   198        case p_ of
   192          Pbl => update_pbl pt p itmlist
   199          Pbl => update_pbl pt p itmlist
   193 	     | Met => update_met pt p itmlist
   200 	     | Met => update_met pt p itmlist
   194        | _ => error ("uncovered case " ^ pos_2str p_))
   201        | _ => error ("uncovered case " ^ pos_2str p_))
   195     (*WN110515 probably declare_constraints with input item (without dsc)*)
   202     (*WN110515 probably declare_constraints with input item (without dsc)*)
   196   | generate1 thy (Add_Relation' (_, itmlist)) _ (pos as (p, p_)) pt = 
   203   | generate1 thy (Add_Relation' (_, itmlist)) _ (pos as (p, p_)) pt = 
   197     (pos, [], Form' (PpcKF (0, EdUndef, 0, Nundef, (Upblmet, itms2itemppc thy [] []))),
   204     (pos, [],  PpcKF (Upblmet, itms2itemppc thy [] []),
   198        case p_ of
   205        case p_ of
   199          Pbl => update_pbl pt p itmlist
   206          Pbl => update_pbl pt p itmlist
   200 	     | Met => update_met pt p itmlist
   207 	     | Met => update_met pt p itmlist
   201        | _ => error ("uncovered case " ^ pos_2str p_))
   208        | _ => error ("uncovered case " ^ pos_2str p_))
   202   | generate1 thy (Specify_Theory' domID) _ (pos as (p,_)) pt = 
   209   | generate1 thy (Specify_Theory' domID) _ (pos as (p,_)) pt = 
   203     (pos, [] ,Form' (PpcKF (0 ,EdUndef, 0, Nundef, (Upblmet, itms2itemppc thy [] []))),
   210     (pos, [] , PpcKF  (Upblmet, itms2itemppc thy [] []),
   204       update_domID pt p domID)
   211       update_domID pt p domID)
   205   | generate1 thy (Specify_Problem' (pI, (_, (itms, _)))) _ (p, _) pt = 
   212   | generate1 thy (Specify_Problem' (pI, (_, (itms, _)))) _ (p, _) pt = 
   206     let
   213     let
   207       val pt = update_pbl pt p itms
   214       val pt = update_pbl pt p itms
   208       val pt = update_pblID pt p pI
   215       val pt = update_pblID pt p pI
   209     in
   216     in
   210       ((p, Pbl), [], Form' (PpcKF (0, EdUndef, 0, Nundef, (Upblmet, itms2itemppc thy [] []))), pt)
   217       ((p, Pbl), [], PpcKF (Upblmet, itms2itemppc thy [] []), pt)
   211     end
   218     end
   212   | generate1 thy (Specify_Method' (mID, oris, itms)) _ (p, _) pt = 
   219   | generate1 thy (Specify_Method' (mID, oris, itms)) _ (p, _) pt = 
   213     let
   220     let
   214       val pt = update_oris pt p oris
   221       val pt = update_oris pt p oris
   215       val pt = update_met pt p itms
   222       val pt = update_met pt p itms
   216       val pt = update_metID pt p mID
   223       val pt = update_metID pt p mID
   217     in
   224     in
   218       ((p, Met), [], Form' (PpcKF (0, EdUndef, 0, Nundef, (Upblmet, itms2itemppc thy [] []))), pt)
   225       ((p, Met), [], PpcKF (Upblmet, itms2itemppc thy [] []), pt)
   219     end
   226     end
   220   | generate1 thy (Model_Problem' (_, itms, met)) _ (pos as (p,_)) pt =
   227   | generate1 thy (Model_Problem' (_, itms, met)) _ (pos as (p,_)) pt =
   221     let 
   228     let 
   222       val pt = update_pbl pt p itms
   229       val pt = update_pbl pt p itms
   223 	    val pt = update_met pt p met
   230 	    val pt = update_met pt p met
   224     in
   231     in
   225       (pos, [], Form' (PpcKF (0, EdUndef, 0, Nundef, (Upblmet, itms2itemppc thy [] []))), pt)
   232       (pos, [], PpcKF (Upblmet, itms2itemppc thy [] []), pt)
   226     end
   233     end
   227   | generate1 thy (Refine_Tacitly' (_, pIre, domID, metID, pbl)) _ (pos as (p, _)) pt = 
   234   | generate1 thy (Refine_Tacitly' (_, pIre, domID, metID, pbl)) _ (pos as (p, _)) pt = 
   228     let
   235     let
   229       val pt = update_pbl pt p pbl
   236       val pt = update_pbl pt p pbl
   230       val pt = update_orispec pt p (domID, pIre, metID)
   237       val pt = update_orispec pt p (domID, pIre, metID)
   231     in
   238     in
   232       (pos, [], Form' (PpcKF (0, EdUndef, 0, Nundef, (Upblmet, itms2itemppc thy [] []))), pt)
   239       (pos, [], PpcKF (Upblmet, itms2itemppc thy [] []), pt)
   233     end
   240     end
   234   | generate1 thy (Refine_Problem' (pI, _)) _ (pos as (p, _)) pt =
   241   | generate1 thy (Refine_Problem' (pI, _)) _ (pos as (p, _)) pt =
   235     let
   242     let
   236       val (dI, _, mI) = get_obj g_spec pt p
   243       val (dI, _, mI) = get_obj g_spec pt p
   237       val pt = update_spec pt p (dI, pI, mI)
   244       val pt = update_spec pt p (dI, pI, mI)
   238     in
   245     in
   239       (pos, [], Form' (PpcKF (0, EdUndef, 0, Nundef, (Upblmet, itms2itemppc thy [] []))), pt)
   246       (pos, [], PpcKF (Upblmet, itms2itemppc thy [] []), pt)
   240     end
   247     end
   241   | generate1 _ (Apply_Method' (_, topt, is, ctxt)) _ (pos as (p, _)) pt = 
   248   | generate1 _ (Apply_Method' (_, topt, is, ctxt)) _ (pos as (p, _)) pt = 
   242     (case topt of 
   249     (case topt of 
   243       SOME t => 
   250       SOME t => 
   244         let val (pt, c) = cappend_form pt p (is, ctxt) t
   251         let val (pt, c) = cappend_form pt p (is, ctxt) t
   249       val p =
   256       val p =
   250         let val (ps, p') = split_last p (* no connex to prev.ppobj *)
   257         let val (ps, p') = split_last p (* no connex to prev.ppobj *)
   251 	      in if p' = 0 then ps @ [1] else p end
   258 	      in if p' = 0 then ps @ [1] else p end
   252       val (pt, c) = cappend_form pt p l t
   259       val (pt, c) = cappend_form pt p l t
   253     in
   260     in
   254       ((p, Frm): pos', c, Form' (FormKF (~1, EdUndef, length p, Nundef, term2str t)), pt)
   261       ((p, Frm): pos', c, FormKF (term2str t), pt)
   255     end
   262     end
   256   | generate1 _ (Begin_Trans' t) l (p, Frm) pt =
   263   | generate1 _ (Begin_Trans' t) l (p, Frm) pt =
   257     let
   264     let
   258       val (pt, c) = cappend_form pt p l t
   265       val (pt, c) = cappend_form pt p l t
   259       val pt = update_branch pt p TransitiveB (*040312*)
   266       val pt = update_branch pt p TransitiveB (*040312*)
   260       (* replace the old PrfOjb ~~~~~ *)
   267       (* replace the old PrfOjb ~~~~~ *)
   261       val p = (lev_on o lev_dn (* starts with [...,0] *)) p
   268       val p = (lev_on o lev_dn (* starts with [...,0] *)) p
   262       val (pt, c') = cappend_form pt p l t (*FIXME.0402 same istate ???*)
   269       val (pt, c') = cappend_form pt p l t (*FIXME.0402 same istate ???*)
   263     in
   270     in
   264       ((p, Frm), c @ c', Form' (FormKF (~1, EdUndef, length p, Nundef, term2str t)), pt)
   271       ((p, Frm), c @ c', FormKF (term2str t), pt)
   265     end
   272     end
   266   | generate1 thy (Begin_Trans' t) l (p, Res) pt = 
   273   | generate1 thy (Begin_Trans' t) l (p, Res) pt = 
   267     (*append after existing PrfObj    vvvvvvvvvvvvv*)
   274     (*append after existing PrfObj    vvvvvvvvvvvvv*)
   268     generate1 thy (Begin_Trans' t) l (lev_on p, Frm) pt
   275     generate1 thy (Begin_Trans' t) l (lev_on p, Frm) pt
   269   | generate1 _ (End_Trans' tasm) l (p, _) pt =
   276   | generate1 _ (End_Trans' tasm) l (p, _) pt =
   270     let
   277     let
   271       val p' = lev_up p
   278       val p' = lev_up p
   272       val (pt, c) = append_result pt p' l tasm Complete
   279       val (pt, c) = append_result pt p' l tasm Complete
   273     in
   280     in
   274       ((p', Res), c, Form' (FormKF (~1, EdUndef, length p, Nundef, term2str t)), pt)
   281       ((p', Res), c, FormKF (term2str t), pt)
   275     end
   282     end
   276   | generate1 _ (Rewrite_Inst' (_, _, _, _, subs', thm', f, (f', asm))) (is, ctxt) (p, _) pt =
   283   | generate1 _ (Rewrite_Inst' (_, _, _, _, subs', thm', f, (f', asm))) (is, ctxt) (p, _) pt =
   277     let
   284     let
   278       val (pt, c) = cappend_atomic pt p (is, insert_assumptions asm ctxt) f
   285       val (pt, c) = cappend_atomic pt p (is, insert_assumptions asm ctxt) f
   279         (Rewrite_Inst (subst2subs subs', thm')) (f',asm) Complete;
   286         (Rewrite_Inst (subst2subs subs', thm')) (f',asm) Complete;
   280       val pt = update_branch pt p TransitiveB
   287       val pt = update_branch pt p TransitiveB
   281     in ((p, Res), c, Form' (FormKF (~1, EdUndef, length p, Nundef, term2str f')), pt) end
   288     in
       
   289       ((p, Res), c, FormKF (term2str f'), pt)
       
   290     end
   282  | generate1 _ (Rewrite' (_, _, _, _, thm', f, (f', asm))) (is, ctxt) (p, _) pt =
   291  | generate1 _ (Rewrite' (_, _, _, _, thm', f, (f', asm))) (is, ctxt) (p, _) pt =
   283    let
   292    let
   284      val (pt, c) = cappend_atomic pt p (is, insert_assumptions asm ctxt) f
   293      val (pt, c) = cappend_atomic pt p (is, insert_assumptions asm ctxt) f
   285        (Rewrite thm') (f', asm) Complete
   294        (Rewrite thm') (f', asm) Complete
   286      val pt = update_branch pt p TransitiveB
   295      val pt = update_branch pt p TransitiveB
   287    in
   296    in
   288     ((p, Res), c, Form' (FormKF (~1, EdUndef, length p, Nundef, term2str f')), pt)
   297     ((p, Res), c, FormKF (term2str f'), pt)
   289    end
   298    end
   290   | generate1 thy (Rewrite_Asm' all) l p pt = generate1 thy (Rewrite' all) l p pt
   299   | generate1 thy (Rewrite_Asm' all) l p pt = generate1 thy (Rewrite' all) l p pt
   291   | generate1 _ (Rewrite_Set_Inst' (_, _, subs', rls', f, (f', asm))) (is, ctxt) (p, _) pt =
   300   | generate1 _ (Rewrite_Set_Inst' (_, _, subs', rls', f, (f', asm))) (is, ctxt) (p, _) pt =
   292     let
   301     let
   293       val (pt, c) = cappend_atomic pt p (is, insert_assumptions asm ctxt) f 
   302       val (pt, c) = cappend_atomic pt p (is, insert_assumptions asm ctxt) f 
   294         (Rewrite_Set_Inst (subst2subs subs', id_rls rls')) (f', asm) Complete
   303         (Rewrite_Set_Inst (subst2subs subs', id_rls rls')) (f', asm) Complete
   295       val pt = update_branch pt p TransitiveB
   304       val pt = update_branch pt p TransitiveB
   296     in
   305     in
   297       ((p, Res), c, Form' (FormKF (~1, EdUndef, length p, Nundef, term2str f')), pt)
   306       ((p, Res), c, FormKF (term2str f'), pt)
   298     end
   307     end
   299   | generate1 thy (Detail_Set_Inst' (_, _, subs, rls, f, (_, asm))) (is, ctxt) (p, _) pt =
   308   | generate1 thy (Detail_Set_Inst' (_, _, subs, rls, f, (_, asm))) (is, ctxt) (p, _) pt =
   300     let
   309     let
   301       val ctxt' = insert_assumptions asm ctxt
   310       val ctxt' = insert_assumptions asm ctxt
   302       val (pt, _) = cappend_form pt p (is, ctxt') f 
   311       val (pt, _) = cappend_form pt p (is, ctxt') f 
   311     let
   320     let
   312       val (pt, c) = cappend_atomic pt p (is, insert_assumptions asm ctxt) f 
   321       val (pt, c) = cappend_atomic pt p (is, insert_assumptions asm ctxt) f 
   313         (Rewrite_Set (id_rls rls')) (f',asm) Complete
   322         (Rewrite_Set (id_rls rls')) (f',asm) Complete
   314       val pt = update_branch pt p TransitiveB
   323       val pt = update_branch pt p TransitiveB
   315     in
   324     in
   316       ((p, Res), c, Form' (FormKF (~1 ,EdUndef, length p, Nundef, term2str f')), pt)
   325       ((p, Res), c, FormKF (term2str f'), pt)
   317     end
   326     end
   318   | generate1 thy (Detail_Set' (_, _, rls, f, (_, asm))) (is, ctxt) (p, _) pt =
   327   | generate1 thy (Detail_Set' (_, _, rls, f, (_, asm))) (is, ctxt) (p, _) pt =
   319     let
   328     let
   320       val ctxt' = insert_assumptions asm ctxt
   329       val ctxt' = insert_assumptions asm ctxt
   321       val (pt, _) = cappend_form pt p (is, ctxt') f 
   330       val (pt, _) = cappend_form pt p (is, ctxt') f 
   328     end
   337     end
   329   | generate1 _ (Check_Postcond' (_, (scval, asm))) l (p, _) pt =
   338   | generate1 _ (Check_Postcond' (_, (scval, asm))) l (p, _) pt =
   330       let
   339       let
   331         val (pt, c) = append_result pt p l (scval, asm) Complete
   340         val (pt, c) = append_result pt p l (scval, asm) Complete
   332       in
   341       in
   333         ((p, Res), c, Form' (FormKF (~1, EdUndef, length p, Nundef, term2str scval)), pt)
   342         ((p, Res), c, FormKF (term2str scval), pt)
   334       end
   343       end
   335   | generate1 _ (Calculate' (_, op_, f, (f', _))) l (p, _) pt =
   344   | generate1 _ (Calculate' (_, op_, f, (f', _))) l (p, _) pt =
   336       let
   345       let
   337         val (pt,c) = cappend_atomic pt p l f (Calculate op_) (f', []) Complete
   346         val (pt,c) = cappend_atomic pt p l f (Calculate op_) (f', []) Complete
   338       in
   347       in
   339         ((p, Res), c, Form' (FormKF (~1, EdUndef, length p, Nundef, term2str f')), pt)
   348         ((p, Res), c, FormKF (term2str f'), pt)
   340       end
   349       end
   341   | generate1 _ (Check_elementwise' (consts, pred, (f', asm))) l (p, _) pt =
   350   | generate1 _ (Check_elementwise' (consts, pred, (f', asm))) l (p, _) pt =
   342       let
   351       let
   343         val (pt,c) = cappend_atomic pt p l consts (Check_elementwise pred) (f',asm) Complete
   352         val (pt,c) = cappend_atomic pt p l consts (Check_elementwise pred) (f',asm) Complete
   344       in
   353       in
   345         ((p, Res), c, Form' (FormKF (~1, EdUndef, length p, Nundef, term2str f')), pt)
   354         ((p, Res), c, FormKF (term2str f'), pt)
   346       end
   355       end
   347   | generate1 _ (Or_to_List' (ors, list)) l (p, _) pt =
   356   | generate1 _ (Or_to_List' (ors, list)) l (p, _) pt =
   348       let
   357       let
   349         val (pt,c) = cappend_atomic pt p l ors Or_to_List (list, []) Complete
   358         val (pt,c) = cappend_atomic pt p l ors Or_to_List (list, []) Complete
   350       in
   359       in
   351         ((p, Res), c, Form' (FormKF (~1, EdUndef, length p, Nundef, term2str list)), pt)
   360         ((p, Res), c, FormKF (term2str list), pt)
   352       end
   361       end
   353   | generate1 _ (Substitute' (_, _, subte, t, t')) l (p, _) pt =
   362   | generate1 _ (Substitute' (_, _, subte, t, t')) l (p, _) pt =
   354       let
   363       let
   355         val (pt,c) =
   364         val (pt,c) =
   356           cappend_atomic pt p l t (Substitute (subte2sube subte)) (t',[]) Complete
   365           cappend_atomic pt p l t (Substitute (subte2sube subte)) (t',[]) Complete
   357         in ((p, Res), c, Form' (FormKF (~1, EdUndef, length p, Nundef, term2str t')), pt) 
   366         in ((p, Res), c, FormKF (term2str t'), pt) 
   358         end
   367         end
   359   | generate1 _ (Tac_ (_, f, id, f')) l (p, _) pt =
   368   | generate1 _ (Tac_ (_, f, id, f')) l (p, _) pt =
   360       let
   369       let
   361         val (pt, c) = cappend_atomic pt p l (str2term f) (Tac id) (str2term f', []) Complete
   370         val (pt, c) = cappend_atomic pt p l (str2term f) (Tac id) (str2term f', []) Complete
   362       in
   371       in
   363         ((p,Res), c, Form' (FormKF (~1, EdUndef, length p, Nundef, f')), pt)
   372         ((p,Res), c, FormKF f', pt)
   364       end
   373       end
   365   | generate1 thy (Subproblem' ((domID, pblID, metID), oris, hdl, fmz_, ctxt, f)) l (p, _) pt =
   374   | generate1 thy (Subproblem' ((domID, pblID, metID), oris, hdl, fmz_, ctxt, f)) l (p, _) pt =
   366     let
   375     let
   367 	    val (pt, c) = cappend_problem pt p l (fmz_, (domID, pblID, metID)) (oris, (domID, pblID, metID), hdl)
   376 	    val (pt, c) = cappend_problem pt p l (fmz_, (domID, pblID, metID)) (oris, (domID, pblID, metID), hdl)
   368       val pt = update_ctxt pt p ctxt
   377       val pt = update_ctxt pt p ctxt
   369 	    val f = Syntax.string_of_term (thy2ctxt thy) f
   378 	    val f = Syntax.string_of_term (thy2ctxt thy) f
   370     in
   379     in
   371       ((p, Pbl), c, Form' (FormKF (~1, EdUndef, length p, Nundef, f)), pt)
   380       ((p, Pbl), c, FormKF f, pt)
   372     end
   381     end
   373   | generate1 _ m' _ _ _ = error ("generate1: not impl.for " ^ tac_2str m')
   382   | generate1 _ m' _ _ _ = error ("generate1: not impl.for " ^ tac_2str m')
   374 
   383 
   375 fun generate_inconsistent_rew (subs_opt, thm') f' (is, ctxt) (pos as (p,_)) pt =
   384 fun generate_inconsistent_rew (subs_opt, thm') f' (is, ctxt) (pos as (p,_)) pt =
   376   let
   385   let