41 NONE => (pbl, []) |
41 NONE => (pbl, []) |
42 | _ => complete_mod_ (oris, mpc, ppc, probl) |
42 | _ => complete_mod_ (oris, mpc, ppc, probl) |
43 (*----------------------------------------------------------------*) |
43 (*----------------------------------------------------------------*) |
44 val tac_ = Tactic.Model_Problem' (pI, pbl, met) |
44 val tac_ = Tactic.Model_Problem' (pI, pbl, met) |
45 val (pos,c,_,pt) = Generate.generate1 tac_ (Istate_Def.Uistate, ctxt) (pt, pos) |
45 val (pos,c,_,pt) = Generate.generate1 tac_ (Istate_Def.Uistate, ctxt) (pt, pos) |
46 in ([(tac, tac_, (pos, (Istate_Def.Uistate, ContextC.e_ctxt)))], c, (pt,pos)) end |
46 in ([(tac, tac_, (pos, (Istate_Def.Uistate, ContextC.empty)))], c, (pt,pos)) end |
47 | by_tactic_input (Tactic.Add_Given ct) ptp = nxt_specif_additem "#Given" ct ptp |
47 | by_tactic_input (Tactic.Add_Given ct) ptp = nxt_specif_additem "#Given" ct ptp |
48 | by_tactic_input (Tactic.Add_Find ct) ptp = nxt_specif_additem "#Find" ct ptp |
48 | by_tactic_input (Tactic.Add_Find ct) ptp = nxt_specif_additem "#Find" ct ptp |
49 | by_tactic_input (Tactic.Add_Relation ct) ptp = nxt_specif_additem"#Relate" ct ptp |
49 | by_tactic_input (Tactic.Add_Relation ct) ptp = nxt_specif_additem"#Relate" ct ptp |
50 (*. called only if no_met is specified .*) |
50 (*. called only if no_met is specified .*) |
51 | by_tactic_input (Tactic.Refine_Tacitly pI) (ptp as (pt, pos as (p, _))) = |
51 | by_tactic_input (Tactic.Refine_Tacitly pI) (ptp as (pt, pos as (p, _))) = |
64 val thy = Celem.assoc_thy dI |
64 val thy = Celem.assoc_thy dI |
65 val (pos, c, _, pt) = |
65 val (pos, c, _, pt) = |
66 Generate.generate1 (Tactic.Refine_Tacitly' (pI, pI', dI, mI,(*pbl*)[])) (Istate_Def.Uistate, ctxt) (pt, pos) |
66 Generate.generate1 (Tactic.Refine_Tacitly' (pI, pI', dI, mI,(*pbl*)[])) (Istate_Def.Uistate, ctxt) (pt, pos) |
67 in |
67 in |
68 ([(Tactic.Refine_Tacitly pI, Tactic.Refine_Tacitly' (pI,pI',dI,mI,(*pbl*)[]), |
68 ([(Tactic.Refine_Tacitly pI, Tactic.Refine_Tacitly' (pI,pI',dI,mI,(*pbl*)[]), |
69 (pos, (Istate_Def.Uistate, ContextC.e_ctxt)))], c, (pt,pos)) |
69 (pos, (Istate_Def.Uistate, ContextC.empty)))], c, (pt,pos)) |
70 end |
70 end |
71 | NONE => ([], [], ptp) |
71 | NONE => ([], [], ptp) |
72 end |
72 end |
73 | by_tactic_input (Tactic.Refine_Problem pI) (ptp as (pt, pos as (p,_))) = |
73 | by_tactic_input (Tactic.Refine_Problem pI) (ptp as (pt, pos as (p,_))) = |
74 let |
74 let |
82 NONE => ([], [], ptp) |
82 NONE => ([], [], ptp) |
83 | SOME rfd => |
83 | SOME rfd => |
84 let |
84 let |
85 val (pos,c,_,pt) = Generate.generate1 (Tactic.Refine_Problem' rfd) (Istate_Def.Uistate, ctxt) (pt, pos) |
85 val (pos,c,_,pt) = Generate.generate1 (Tactic.Refine_Problem' rfd) (Istate_Def.Uistate, ctxt) (pt, pos) |
86 in |
86 in |
87 ([(Tactic.Refine_Problem pI, Tactic.Refine_Problem' rfd, (pos, (Istate_Def.Uistate, ContextC.e_ctxt)))], c, (pt,pos)) |
87 ([(Tactic.Refine_Problem pI, Tactic.Refine_Problem' rfd, (pos, (Istate_Def.Uistate, ContextC.empty)))], c, (pt,pos)) |
88 end |
88 end |
89 end |
89 end |
90 | by_tactic_input (Tactic.Specify_Problem pI) (pt, pos as (p,_)) = |
90 | by_tactic_input (Tactic.Specify_Problem pI) (pt, pos as (p,_)) = |
91 let |
91 let |
92 val (oris, dI, dI', pI', probl, ctxt) = case get_obj I pt p of |
92 val (oris, dI, dI', pI', probl, ctxt) = case get_obj I pt p of |
103 val (c, pt) = |
103 val (c, pt) = |
104 case Generate.generate1 (Tactic.Specify_Problem' (pI, pbl)) (Istate_Def.Uistate, ctxt) (pt, pos) of |
104 case Generate.generate1 (Tactic.Specify_Problem' (pI, pbl)) (Istate_Def.Uistate, ctxt) (pt, pos) of |
105 ((_, Pbl), c, _, pt) => (c, pt) |
105 ((_, Pbl), c, _, pt) => (c, pt) |
106 | _ => error "" |
106 | _ => error "" |
107 in |
107 in |
108 ([(Tactic.Specify_Problem pI, Tactic.Specify_Problem' (pI, pbl), (pos, (Istate_Def.Uistate, ContextC.e_ctxt)))], c, (pt, pos)) |
108 ([(Tactic.Specify_Problem pI, Tactic.Specify_Problem' (pI, pbl), (pos, (Istate_Def.Uistate, ContextC.empty)))], c, (pt, pos)) |
109 end |
109 end |
110 (* transfers oris (not required in pbl) to met-model for script-env |
110 (* transfers oris (not required in pbl) to met-model for script-env |
111 FIXME.WN.8.03: application of several mIDs to SAME model? *) |
111 FIXME.WN.8.03: application of several mIDs to SAME model? *) |
112 | by_tactic_input (Tactic.Specify_Method mID) (pt, pos as (p,_)) = |
112 | by_tactic_input (Tactic.Specify_Method mID) (pt, pos as (p,_)) = |
113 let |
113 let |
122 val (_, (itms, _)) = Specify.match_itms_oris thy met (ppc,pre,prls ) oris |
122 val (_, (itms, _)) = Specify.match_itms_oris thy met (ppc,pre,prls ) oris |
123 val itms = Specify.hack_until_review_Specify_2 mID itms |
123 val itms = Specify.hack_until_review_Specify_2 mID itms |
124 val (pos, c, _, pt) = |
124 val (pos, c, _, pt) = |
125 Generate.generate1 (Tactic.Specify_Method' (mID, oris, itms)) (Istate_Def.Uistate, ctxt) (pt, pos) |
125 Generate.generate1 (Tactic.Specify_Method' (mID, oris, itms)) (Istate_Def.Uistate, ctxt) (pt, pos) |
126 in |
126 in |
127 ([(Tactic.Specify_Method mID, Tactic.Specify_Method' (mID, oris, itms), (pos, (Istate_Def.Uistate, ContextC.e_ctxt)))], c, (pt, pos)) |
127 ([(Tactic.Specify_Method mID, Tactic.Specify_Method' (mID, oris, itms), (pos, (Istate_Def.Uistate, ContextC.empty)))], c, (pt, pos)) |
128 end |
128 end |
129 | by_tactic_input (Tactic.Specify_Theory dI) (pt, pos as (_, Pbl)) = |
129 | by_tactic_input (Tactic.Specify_Theory dI) (pt, pos as (_, Pbl)) = |
130 let |
130 let |
131 val ctxt = get_ctxt pt pos |
131 val ctxt = get_ctxt pt pos |
132 val (pos, c, _, pt) = |
132 val (pos, c, _, pt) = |
140 val ctxt = get_ctxt pt pos |
140 val ctxt = get_ctxt pt pos |
141 val (pos, c, _, pt) = Generate.generate1 (Tactic.Specify_Theory' dI) (Istate_Def.Uistate, ctxt) (pt, pos) |
141 val (pos, c, _, pt) = Generate.generate1 (Tactic.Specify_Theory' dI) (Istate_Def.Uistate, ctxt) (pt, pos) |
142 in (*FIXXXME: check if met can still be parsed*) |
142 in (*FIXXXME: check if met can still be parsed*) |
143 ([(Tactic.Specify_Theory dI, Tactic.Specify_Theory' dI, (pos, (Istate_Def.Uistate, ctxt)))], c, (pt, pos)) |
143 ([(Tactic.Specify_Theory dI, Tactic.Specify_Theory' dI, (pos, (Istate_Def.Uistate, ctxt)))], c, (pt, pos)) |
144 end |
144 end |
145 | by_tactic_input m' _ = error ("by_tactic_input: not impl. for " ^ Tactic.tac2str m') |
145 | by_tactic_input m' _ = error ("by_tactic_input: not impl. for " ^ Tactic.input_to_string m') |
146 (* was fun Math_Engine.nxt_specify_ *) |
146 (* was fun Math_Engine.nxt_specify_ *) |
147 |
147 |
148 |
148 |
149 (* was fun Chead.specify *) |
149 (* was fun Chead.specify *) |
150 fun by_tactic (Tactic.Init_Proof' (fmz, spec' as (dI', pI', mI'))) _ = |
150 fun by_tactic (Tactic.Init_Proof' (fmz, spec' as (dI', pI', mI'))) _ = |
151 let (* either """"""""""""""" all empty or complete *) |
151 let (* either """"""""""""""" all empty or complete *) |
152 val thy = Celem.assoc_thy dI' |
152 val thy = Celem.assoc_thy dI' |
153 val (oris, ctxt) = |
153 val (oris, ctxt) = |
154 if dI' = Rule.e_domID orelse pI' = Celem.e_pblID (*andalso? WN110511*) |
154 if dI' = Rule.e_domID orelse pI' = Celem.e_pblID (*andalso? WN110511*) |
155 then ([], ContextC.e_ctxt) |
155 then ([], ContextC.empty) |
156 else pI' |> #ppc o Specify.get_pbt |> Specify.prep_ori fmz thy |
156 else pI' |> #ppc o Specify.get_pbt |> Specify.prep_ori fmz thy |
157 (* these are deprecated vvvvvvvvvvvvvvvvvvvvvvvvvv*) |
157 (* these are deprecated vvvvvvvvvvvvvvvvvvvvvvvvvv*) |
158 val (pt, _) = cappend_problem e_ctree [] (Istate_Def.e_istate, ContextC.e_ctxt) (fmz, spec') |
158 val (pt, _) = cappend_problem e_ctree [] (Istate_Def.empty, ContextC.empty) (fmz, spec') |
159 (oris, (dI',pI',mI'), Rule.e_term, ctxt) |
159 (oris, (dI',pI',mI'), Rule.e_term, ctxt) |
160 val pt = update_loc' pt [] (SOME (Istate_Def.e_istate, ctxt), NONE) |
160 val pt = update_loc' pt [] (SOME (Istate_Def.empty, ctxt), NONE) |
161 in |
161 in |
162 case mI' of |
162 case mI' of |
163 ["no_met"] => ("Refine_Tacitly", ([], [], (pt, ([], Pbl)))) |
163 ["no_met"] => ("Refine_Tacitly", ([], [], (pt, ([], Pbl)))) |
164 | _ => ("ok", ([], [], (pt, ([], Pbl)))) |
164 | _ => ("ok", ([], [], (pt, ([], Pbl)))) |
165 end |
165 end |
190 | _ => error "Step_Solve.by_tactic (Refine_Tacitly': uncovered case get_obj"*) |
190 | _ => error "Step_Solve.by_tactic (Refine_Tacitly': uncovered case get_obj"*) |
191 val {met, thy,...} = Specify.get_pbt pIre |
191 val {met, thy,...} = Specify.get_pbt pIre |
192 val (domID, metID) = (Rule.string_of_thy thy, if length met = 0 then Celem.e_metID else hd met) |
192 val (domID, metID) = (Rule.string_of_thy thy, if length met = 0 then Celem.e_metID else hd met) |
193 val ((p,_), _, _, pt) = |
193 val ((p,_), _, _, pt) = |
194 Generate.generate1 (Tactic.Refine_Tacitly' (pI, pIre, domID, metID, [(*pbl*)])) |
194 Generate.generate1 (Tactic.Refine_Tacitly' (pI, pIre, domID, metID, [(*pbl*)])) |
195 (Istate_Def.Uistate, ContextC.e_ctxt) (pt, pos) |
195 (Istate_Def.Uistate, ContextC.empty) (pt, pos) |
196 (* deprecated^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ *) |
196 (* deprecated^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ *) |
197 (* val (pbl, pre, _) = ([], [], false)*) |
197 (* val (pbl, pre, _) = ([], [], false)*) |
198 in |
198 in |
199 ("ok", ([], [], (pt,(p, Pbl)))) |
199 ("ok", ([], [], (pt,(p, Pbl)))) |
200 end |
200 end |
284 let |
284 let |
285 val {cas, met, ppc, thy, ...} = Specify.get_pbt pI |
285 val {cas, met, ppc, thy, ...} = Specify.get_pbt pI |
286 val dI = if dI = "" then Rule.theory2theory' thy else dI |
286 val dI = if dI = "" then Rule.theory2theory' thy else dI |
287 val mI = if mI = [] then hd met else mI |
287 val mI = if mI = [] then hd met else mI |
288 val hdl = case cas of NONE => Auto_Prog.pblterm dI pI | SOME t => t |
288 val hdl = case cas of NONE => Auto_Prog.pblterm dI pI | SOME t => t |
289 val (pt,_) = cappend_problem e_ctree [] (Istate_Def.Uistate, ContextC.e_ctxt) ([], (dI, pI, mI)) |
289 val (pt,_) = cappend_problem e_ctree [] (Istate_Def.Uistate, ContextC.empty) ([], (dI, pI, mI)) |
290 ([], (dI,pI,mI), hdl, ContextC.e_ctxt) |
290 ([], (dI,pI,mI), hdl, ContextC.empty) |
291 val pt = update_spec pt [] (dI, pI, mI) |
291 val pt = update_spec pt [] (dI, pI, mI) |
292 val pits = Generate.init_pbl' ppc |
292 val pits = Generate.init_pbl' ppc |
293 val pt = update_pbl pt [] pits |
293 val pt = update_pbl pt [] pits |
294 in ((pt, ([] , Pbl)), []) end |
294 in ((pt, ([] , Pbl)), []) end |
295 else |
295 else |
296 if mI <> [] |
296 if mI <> [] |
297 then (* from met-browser *) |
297 then (* from met-browser *) |
298 let |
298 let |
299 val {ppc, ...} = Specify.get_met mI |
299 val {ppc, ...} = Specify.get_met mI |
300 val dI = if dI = "" then "Isac_Knowledge" else dI |
300 val dI = if dI = "" then "Isac_Knowledge" else dI |
301 val (pt, _) = cappend_problem e_ctree [] (Istate_Def.e_istate, ContextC.e_ctxt) |
301 val (pt, _) = cappend_problem e_ctree [] (Istate_Def.empty, ContextC.empty) |
302 ([], (dI, pI, mI)) ([], (dI, pI, mI), Rule.e_term, ContextC.e_ctxt) |
302 ([], (dI, pI, mI)) ([], (dI, pI, mI), Rule.e_term, ContextC.empty) |
303 val pt = update_spec pt [] (dI, pI, mI) |
303 val pt = update_spec pt [] (dI, pI, mI) |
304 val mits = Generate.init_pbl' ppc |
304 val mits = Generate.init_pbl' ppc |
305 val pt = update_met pt [] mits |
305 val pt = update_met pt [] mits |
306 in ((pt, ([], Met)), []) end |
306 in ((pt, ([], Met)), []) end |
307 else (* new example, pepare for interactive modeling *) |
307 else (* new example, pepare for interactive modeling *) |
308 let |
308 let |
309 val (pt, _) = cappend_problem e_ctree [] (Istate_Def.e_istate, ContextC.e_ctxt) |
309 val (pt, _) = cappend_problem e_ctree [] (Istate_Def.empty, ContextC.empty) |
310 ([], Celem.e_spec) ([], Celem.e_spec, Rule.e_term, ContextC.e_ctxt) |
310 ([], Celem.e_spec) ([], Celem.e_spec, Rule.e_term, ContextC.empty) |
311 in ((pt, ([], Pbl)), []) end |
311 in ((pt, ([], Pbl)), []) end |
312 | nxt_specify_init_calc (fmz, (dI, pI, mI)) = |
312 | nxt_specify_init_calc (fmz, (dI, pI, mI)) = |
313 let (* both """"""""""""""""""""""""" either empty or complete *) |
313 let (* both """"""""""""""""""""""""" either empty or complete *) |
314 val thy = Celem.assoc_thy dI |
314 val thy = Celem.assoc_thy dI |
315 val (pI, (pors, pctxt), mI) = |
315 val (pI, (pors, pctxt), mI) = |
325 val {cas, ppc, thy = thy', ...} = Specify.get_pbt pI (*take dI from _refined_ pbl*) |
325 val {cas, ppc, thy = thy', ...} = Specify.get_pbt pI (*take dI from _refined_ pbl*) |
326 val dI = Rule.theory2theory' (Stool.common_subthy (thy, thy')) |
326 val dI = Rule.theory2theory' (Stool.common_subthy (thy, thy')) |
327 val hdl = case cas of |
327 val hdl = case cas of |
328 NONE => Auto_Prog.pblterm dI pI |
328 NONE => Auto_Prog.pblterm dI pI |
329 | SOME t => subst_atomic ((vars_of_pbl_' ppc) ~~~ vals_of_oris pors) t |
329 | SOME t => subst_atomic ((vars_of_pbl_' ppc) ~~~ vals_of_oris pors) t |
330 val (pt, _) = cappend_problem e_ctree [] (Istate_Def.e_istate, pctxt) |
330 val (pt, _) = cappend_problem e_ctree [] (Istate_Def.empty, pctxt) |
331 (fmz, (dI, pI, mI)) (pors, (dI, pI, mI), hdl, pctxt) |
331 (fmz, (dI, pI, mI)) (pors, (dI, pI, mI), hdl, pctxt) |
332 in |
332 in |
333 ((pt, ([], Pbl)), fst3 (by_tactic_input Tactic.Model_Problem (pt, ([], Pbl)))) |
333 ((pt, ([], Pbl)), fst3 (by_tactic_input Tactic.Model_Problem (pt, ([], Pbl)))) |
334 end |
334 end |
335 |
335 |