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 |
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 |