src/Tools/isac/Interpret/appl.sml
branchisac-update-Isa09-2
changeset 38031 460c24a6a6ba
parent 38015 67ba02dffacc
child 38050 4c52ad406c20
equal deleted inserted replaced
38030:95d956108461 38031:460c24a6a6ba
    11     (rew_ord':rew_ord',erls,ca)
    11     (rew_ord':rew_ord',erls,ca)
    12   | rew_info (Seq {erls,rew_ord=(rew_ord',_),calc=ca, ...}) =
    12   | rew_info (Seq {erls,rew_ord=(rew_ord',_),calc=ca, ...}) =
    13     (rew_ord',erls,ca)
    13     (rew_ord',erls,ca)
    14   | rew_info (Rrls {erls,rew_ord=(rew_ord',_),calc=ca, ...}) =
    14   | rew_info (Rrls {erls,rew_ord=(rew_ord',_),calc=ca, ...}) =
    15     (rew_ord',erls, ca)
    15     (rew_ord',erls, ca)
    16   | rew_info rls = raise error ("rew_info called with '"^rls2str rls^"'");
    16   | rew_info rls = error ("rew_info called with '"^rls2str rls^"'");
    17 
    17 
    18 (*FIXME.3.4.03:re-organize from_pblobj_or_detail_thm after rls' --> rls*)
    18 (*FIXME.3.4.03:re-organize from_pblobj_or_detail_thm after rls' --> rls*)
    19 fun from_pblobj_or_detail_thm thm' p pt = 
    19 fun from_pblobj_or_detail_thm thm' p pt = 
    20     let val (pbl,p',rls') = par_pbl_det pt p
    20     let val (pbl,p',rls') = par_pbl_det pt p
    21     in if pbl
    21     in if pbl
   105 		 then [pred] 
   105 		 then [pred] 
   106 	       else (map fst) (get_assumptions_ pt (p,Res))
   106 	       else (map fst) (get_assumptions_ pt (p,Res))
   107   in (bdv, pred) end
   107   in (bdv, pred) end
   108 
   108 
   109   | mk_set thy _ _ l _ = 
   109   | mk_set thy _ _ l _ = 
   110   raise error ("check_elementwise: no set "^
   110   error ("check_elementwise: no set "^
   111 		 (Syntax.string_of_term (thy2ctxt thy) l));
   111 		 (Syntax.string_of_term (thy2ctxt thy) l));
   112 (*> val consts = str2term "[x=#4]";
   112 (*> val consts = str2term "[x=#4]";
   113 > val pred = str2term "Assumptions";
   113 > val pred = str2term "Assumptions";
   114 > val pt = union_asm pt p 
   114 > val pt = union_asm pt p 
   115    [("#0 <= sqrt x + sqrt (#5 + x)",[11]),("#0 <= #9 + #4 * x",[22]),
   115    [("#0 <= sqrt x + sqrt (#5 + x)",[11]),("#0 <= #9 + #4 * x",[22]),
   371     val {rew_ord'=ro',erls=erls,...} = 
   371     val {rew_ord'=ro',erls=erls,...} = 
   372       get_met (get_obj g_metID pt pp);
   372       get_met (get_obj g_metID pt pp);
   373     val (f,p) = case p_ of (*p 12.4.00 unnecessary*)
   373     val (f,p) = case p_ of (*p 12.4.00 unnecessary*)
   374               Frm => (get_obj g_form pt p, p)
   374               Frm => (get_obj g_form pt p, p)
   375 	    | Res => ((fst o (get_obj g_result pt)) p, lev_on p)
   375 	    | Res => ((fst o (get_obj g_result pt)) p, lev_on p)
   376 	    | _ => raise error ("applicable_in: call by "^
   376 	    | _ => error ("applicable_in: call by "^
   377 				(pos'2str (p,p_)));
   377 				(pos'2str (p,p_)));
   378   in 
   378   in 
   379     let val subst = subs2subst thy subs;
   379     let val subst = subs2subst thy subs;
   380 	val subs' = subst2subs' subst;
   380 	val subs' = subst2subs' subst;
   381     in case rewrite_inst_ thy (assoc_rew_ord ro') erls
   381     in case rewrite_inst_ thy (assoc_rew_ord ro') erls
   398   let val (msg,thy',ro,rls',(*put_asm*)_)= from_pblobj_or_detail_thm thm' p pt;
   398   let val (msg,thy',ro,rls',(*put_asm*)_)= from_pblobj_or_detail_thm thm' p pt;
   399     val thy = assoc_thy thy';
   399     val thy = assoc_thy thy';
   400     val f = case p_ of
   400     val f = case p_ of
   401               Frm => get_obj g_form pt p
   401               Frm => get_obj g_form pt p
   402 	    | Res => (fst o (get_obj g_result pt)) p
   402 	    | Res => (fst o (get_obj g_result pt)) p
   403 	    | _ => raise error ("applicable_in Rewrite: call by "^
   403 	    | _ => error ("applicable_in Rewrite: call by "^
   404 				(pos'2str (p,p_)));
   404 				(pos'2str (p,p_)));
   405   in if msg = "OK" 
   405   in if msg = "OK" 
   406      then
   406      then
   407       ((*tracing("### applicable_in rls'= "^rls');*)
   407       ((*tracing("### applicable_in rls'= "^rls');*)
   408        (* val SOME (f',asm)=rewrite thy' ro (id_rls rls') put_asm thm' f;
   408        (* val SOME (f',asm)=rewrite thy' ro (id_rls rls') put_asm thm' f;
   427       get_met (get_obj g_metID pt pp);
   427       get_met (get_obj g_metID pt pp);
   428     (*val put_asm = true;*)
   428     (*val put_asm = true;*)
   429     val (f,p) = case p_ of  (*p 12.4.00 unnecessary*)
   429     val (f,p) = case p_ of  (*p 12.4.00 unnecessary*)
   430               Frm => (get_obj g_form pt p, p)
   430               Frm => (get_obj g_form pt p, p)
   431 	    | Res => ((fst o (get_obj g_result pt)) p, lev_on p)
   431 	    | Res => ((fst o (get_obj g_result pt)) p, lev_on p)
   432 	    | _ => raise error ("applicable_in: call by "^
   432 	    | _ => error ("applicable_in: call by "^
   433 				(pos'2str (p,p_)));
   433 				(pos'2str (p,p_)));
   434   in case rewrite_ thy (assoc_rew_ord ro') erls 
   434   in case rewrite_ thy (assoc_rew_ord ro') erls 
   435 		   (*put_asm*)false (assoc_thm' thy thm') f of
   435 		   (*put_asm*)false (assoc_thm' thy thm') f of
   436        SOME (f',asm) => Appl (
   436        SOME (f',asm) => Appl (
   437 	   Rewrite' (thy',ro',erls,(*put_asm*)false,thm', f, (f', asm)))
   437 	   Rewrite' (thy',ro',erls,(*put_asm*)false,thm', f, (f', asm)))
   446     val thy' = (get_obj g_domID pt pp):theory';
   446     val thy' = (get_obj g_domID pt pp):theory';
   447     val thy = assoc_thy thy';
   447     val thy = assoc_thy thy';
   448     val {rew_ord'=ro',...} = get_met (get_obj g_metID pt pp);
   448     val {rew_ord'=ro',...} = get_met (get_obj g_metID pt pp);
   449     val f = case p_ of Frm => get_obj g_form pt p
   449     val f = case p_ of Frm => get_obj g_form pt p
   450 		     | Res => (fst o (get_obj g_result pt)) p
   450 		     | Res => (fst o (get_obj g_result pt)) p
   451 		     | _ => raise error ("applicable_in: call by "^
   451 		     | _ => error ("applicable_in: call by "^
   452 					 (pos'2str (p,p_)));
   452 					 (pos'2str (p,p_)));
   453   in 
   453   in 
   454       let val subst = subs2subst thy subs
   454       let val subst = subs2subst thy subs
   455 	  val subs' = subst2subs' subst
   455 	  val subs' = subst2subs' subst
   456       in case rewrite_set_inst_ thy false subst (assoc_rls rls) f of
   456       in case rewrite_set_inst_ thy false subst (assoc_rls rls) f of
   470     val {rew_ord'=ro',(*asm_rls=asm_rls,*)...} = 
   470     val {rew_ord'=ro',(*asm_rls=asm_rls,*)...} = 
   471       get_met (get_obj g_metID pt pp);
   471       get_met (get_obj g_metID pt pp);
   472     val (f,p) = case p_ of  (*p 12.4.00 unnecessary*)
   472     val (f,p) = case p_ of  (*p 12.4.00 unnecessary*)
   473               Frm => (get_obj g_form pt p, p)
   473               Frm => (get_obj g_form pt p, p)
   474 	    | Res => ((fst o (get_obj g_result pt)) p, lev_on p)
   474 	    | Res => ((fst o (get_obj g_result pt)) p, lev_on p)
   475 	    | _ => raise error ("applicable_in: call by "^
   475 	    | _ => error ("applicable_in: call by "^
   476 				(pos'2str (p,p_)));
   476 				(pos'2str (p,p_)));
   477   in 
   477   in 
   478     let val subst = subs2subst thy subs;
   478     let val subst = subs2subst thy subs;
   479 	val subs' = subst2subs' subst;
   479 	val subs' = subst2subs' subst;
   480     in case rewrite_set_inst_ thy (*put_asm*)false subst (assoc_rls rls) f of
   480     in case rewrite_set_inst_ thy (*put_asm*)false subst (assoc_rls rls) f of
   491     val pp = par_pblobj pt p; 
   491     val pp = par_pblobj pt p; 
   492     val thy' = (get_obj g_domID pt pp):theory';
   492     val thy' = (get_obj g_domID pt pp):theory';
   493     val (f,p) = case p_ of  (*p 12.4.00 unnecessary*)
   493     val (f,p) = case p_ of  (*p 12.4.00 unnecessary*)
   494               Frm => (get_obj g_form pt p, p)
   494               Frm => (get_obj g_form pt p, p)
   495 	    | Res => ((fst o (get_obj g_result pt)) p, lev_on p)
   495 	    | Res => ((fst o (get_obj g_result pt)) p, lev_on p)
   496 	    | _ => raise error ("applicable_in: call by "^
   496 	    | _ => error ("applicable_in: call by "^
   497 				(pos'2str (p,p_)));
   497 				(pos'2str (p,p_)));
   498   in case rewrite_set_ (assoc_thy thy') false (assoc_rls rls) f of
   498   in case rewrite_set_ (assoc_thy thy') false (assoc_rls rls) f of
   499        SOME (f',asm) => 
   499        SOME (f',asm) => 
   500 	((*tracing("#.# applicable_in Rewrite_Set,2f'= "^f');*)
   500 	((*tracing("#.# applicable_in Rewrite_Set,2f'= "^f');*)
   501 	 Appl (Rewrite_Set' (thy',(*put_asm*)false,assoc_rls rls, f, (f', asm)))
   501 	 Appl (Rewrite_Set' (thy',(*put_asm*)false,assoc_rls rls, f, (f', asm)))
   509 	let val pp = par_pblobj pt p 
   509 	let val pp = par_pblobj pt p 
   510 	    val thy' = (get_obj g_domID pt pp):theory'
   510 	    val thy' = (get_obj g_domID pt pp):theory'
   511 	    val f = case p_ of
   511 	    val f = case p_ of
   512 			Frm => get_obj g_form pt p
   512 			Frm => get_obj g_form pt p
   513 		      | Res => (fst o (get_obj g_result pt)) p
   513 		      | Res => (fst o (get_obj g_result pt)) p
   514 		      | _ => raise error ("applicable_in: call by "^
   514 		      | _ => error ("applicable_in: call by "^
   515 					  (pos'2str (p,p_)));
   515 					  (pos'2str (p,p_)));
   516 	in case rewrite_set_ (assoc_thy thy') false (assoc_rls rls) f of
   516 	in case rewrite_set_ (assoc_thy thy') false (assoc_rls rls) f of
   517 	       SOME (f',asm) => 
   517 	       SOME (f',asm) => 
   518 	       Appl (Detail_Set' (thy',false,assoc_rls rls, f, (f',asm)))
   518 	       Appl (Detail_Set' (thy',false,assoc_rls rls, f, (f',asm)))
   519 	     | NONE => Notappl (rls^" not applicable") end
   519 	     | NONE => Notappl (rls^" not applicable") end
   520 
   520 
   521 
   521 
   522   | applicable_in p pt (End_Ruleset) = 
   522   | applicable_in p pt (End_Ruleset) = 
   523   raise error ("applicable_in: not impl. for "^
   523   error ("applicable_in: not impl. for "^
   524 	       (tac2str End_Ruleset))
   524 	       (tac2str End_Ruleset))
   525 
   525 
   526 (* val ((p,p_), pt, (m as Calculate op_)) = (p, pt, m);
   526 (* val ((p,p_), pt, (m as Calculate op_)) = (p, pt, m);
   527    *)
   527    *)
   528 | applicable_in (p,p_) pt (m as Calculate op_) = 
   528 | applicable_in (p,p_) pt (m as Calculate op_) = 
   585 	    | NONE => Notappl (sube2str sube^" not applicable")
   585 	    | NONE => Notappl (sube2str sube^" not applicable")
   586        end
   586        end
   587 ------------------*)
   587 ------------------*)
   588 
   588 
   589   | applicable_in p pt (Apply_Assumption cts') = 
   589   | applicable_in p pt (Apply_Assumption cts') = 
   590   (raise error ("applicable_in: not impl. for "^
   590   (error ("applicable_in: not impl. for "^
   591 	       (tac2str (Apply_Assumption cts'))))
   591 	       (tac2str (Apply_Assumption cts'))))
   592   
   592   
   593   (*'logical' applicability wrt. script in locate: Inconsistent?*)
   593   (*'logical' applicability wrt. script in locate: Inconsistent?*)
   594   | applicable_in (p,p_) pt (m as Take ct') = 
   594   | applicable_in (p,p_) pt (m as Take ct') = 
   595      if member op = [Pbl,Met] p_ 
   595      if member op = [Pbl,Met] p_ 
   600 	       SOME ct => Appl (Take' (term_of ct))
   600 	       SOME ct => Appl (Take' (term_of ct))
   601 	     | NONE => Notappl ("syntax error in "^ct'))
   601 	     | NONE => Notappl ("syntax error in "^ct'))
   602        end
   602        end
   603 
   603 
   604   | applicable_in p pt (Take_Inst ct') = 
   604   | applicable_in p pt (Take_Inst ct') = 
   605   raise error ("applicable_in: not impl. for "^
   605   error ("applicable_in: not impl. for "^
   606 	       (tac2str (Take_Inst ct')))
   606 	       (tac2str (Take_Inst ct')))
   607 
   607 
   608   | applicable_in p pt (Group (con, ints)) = 
   608   | applicable_in p pt (Group (con, ints)) = 
   609   raise error ("applicable_in: not impl. for "^
   609   error ("applicable_in: not impl. for "^
   610 	       (tac2str (Group (con, ints))))
   610 	       (tac2str (Group (con, ints))))
   611 
   611 
   612   | applicable_in (p,p_) pt (m as Subproblem (domID, pblID)) = 
   612   | applicable_in (p,p_) pt (m as Subproblem (domID, pblID)) = 
   613      if member op = [Pbl,Met] p_
   613      if member op = [Pbl,Met] p_
   614        then (*maybe Apply_Method has already been done*)
   614        then (*maybe Apply_Method has already been done*)
   619      else (*somewhere later in the script*)
   619      else (*somewhere later in the script*)
   620        Appl (Subproblem' ((domID, pblID, e_metID), [], 
   620        Appl (Subproblem' ((domID, pblID, e_metID), [], 
   621 			  e_term, [], subpbl domID pblID))
   621 			  e_term, [], subpbl domID pblID))
   622 
   622 
   623   | applicable_in p pt (End_Subproblem) =
   623   | applicable_in p pt (End_Subproblem) =
   624   raise error ("applicable_in: not impl. for "^
   624   error ("applicable_in: not impl. for "^
   625 	       (tac2str (End_Subproblem)))
   625 	       (tac2str (End_Subproblem)))
   626 
   626 
   627   | applicable_in p pt (CAScmd ct') = 
   627   | applicable_in p pt (CAScmd ct') = 
   628   raise error ("applicable_in: not impl. for "^
   628   error ("applicable_in: not impl. for "^
   629 	       (tac2str (CAScmd ct')))
   629 	       (tac2str (CAScmd ct')))
   630   
   630   
   631   | applicable_in p pt (Split_And) = 
   631   | applicable_in p pt (Split_And) = 
   632   raise error ("applicable_in: not impl. for "^
   632   error ("applicable_in: not impl. for "^
   633 	       (tac2str (Split_And)))
   633 	       (tac2str (Split_And)))
   634   | applicable_in p pt (Conclude_And) = 
   634   | applicable_in p pt (Conclude_And) = 
   635   raise error ("applicable_in: not impl. for "^
   635   error ("applicable_in: not impl. for "^
   636 	       (tac2str (Conclude_And)))
   636 	       (tac2str (Conclude_And)))
   637   | applicable_in p pt (Split_Or) = 
   637   | applicable_in p pt (Split_Or) = 
   638   raise error ("applicable_in: not impl. for "^
   638   error ("applicable_in: not impl. for "^
   639 	       (tac2str (Split_Or)))
   639 	       (tac2str (Split_Or)))
   640   | applicable_in p pt (Conclude_Or) = 
   640   | applicable_in p pt (Conclude_Or) = 
   641   raise error ("applicable_in: not impl. for "^
   641   error ("applicable_in: not impl. for "^
   642 	       (tac2str (Conclude_Or)))
   642 	       (tac2str (Conclude_Or)))
   643 
   643 
   644   | applicable_in (p,p_) pt (Begin_Trans) =
   644   | applicable_in (p,p_) pt (Begin_Trans) =
   645     let
   645     let
   646       val (f,p) = case p_ of   (*p 12.4.00 unnecessary*)
   646       val (f,p) = case p_ of   (*p 12.4.00 unnecessary*)
   647 	                             (*_____ implizit Take in gen*)
   647 	                             (*_____ implizit Take in gen*)
   648 	Frm => (get_obj g_form pt p, (lev_on o lev_dn) p)
   648 	Frm => (get_obj g_form pt p, (lev_on o lev_dn) p)
   649       | Res => ((fst o (get_obj g_result pt)) p, (lev_on o lev_dn o lev_on) p)
   649       | Res => ((fst o (get_obj g_result pt)) p, (lev_on o lev_dn o lev_on) p)
   650       | _ => raise error ("applicable_in: call by "^
   650       | _ => error ("applicable_in: call by "^
   651 				(pos'2str (p,p_)));
   651 				(pos'2str (p,p_)));
   652       val thy' = get_obj g_domID pt (par_pblobj pt p);
   652       val thy' = get_obj g_domID pt (par_pblobj pt p);
   653     in (Appl (Begin_Trans' f))
   653     in (Appl (Begin_Trans' f))
   654       handle _ => raise error ("applicable_in: Begin_Trans finds \
   654       handle _ => error ("applicable_in: Begin_Trans finds \
   655                                \syntaxerror in '"^(term2str f)^"'") end
   655                                \syntaxerror in '"^(term2str f)^"'") end
   656 
   656 
   657     (*TODO: check parent branches*)
   657     (*TODO: check parent branches*)
   658   | applicable_in (p,p_) pt (End_Trans) =
   658   | applicable_in (p,p_) pt (End_Trans) =
   659     let val thy' = get_obj g_domID pt (par_pblobj pt p);
   659     let val thy' = get_obj g_domID pt (par_pblobj pt p);
   663 	\the beginning of a transitive sequence"
   663 	\the beginning of a transitive sequence"
   664 	 (*TODO: check parent branches*)
   664 	 (*TODO: check parent branches*)
   665     end
   665     end
   666 
   666 
   667   | applicable_in p pt (Begin_Sequ) = 
   667   | applicable_in p pt (Begin_Sequ) = 
   668   raise error ("applicable_in: not impl. for "^
   668   error ("applicable_in: not impl. for "^
   669 	       (tac2str (Begin_Sequ)))
   669 	       (tac2str (Begin_Sequ)))
   670   | applicable_in p pt (End_Sequ) = 
   670   | applicable_in p pt (End_Sequ) = 
   671   raise error ("applicable_in: not impl. for "^
   671   error ("applicable_in: not impl. for "^
   672 	       (tac2str (End_Sequ)))
   672 	       (tac2str (End_Sequ)))
   673   | applicable_in p pt (Split_Intersect) = 
   673   | applicable_in p pt (Split_Intersect) = 
   674   raise error ("applicable_in: not impl. for "^
   674   error ("applicable_in: not impl. for "^
   675 	       (tac2str (Split_Intersect)))
   675 	       (tac2str (Split_Intersect)))
   676   | applicable_in p pt (End_Intersect) = 
   676   | applicable_in p pt (End_Intersect) = 
   677   raise error ("applicable_in: not impl. for "^
   677   error ("applicable_in: not impl. for "^
   678 	       (tac2str (End_Intersect)))
   678 	       (tac2str (End_Intersect)))
   679 (* val Appl (Check_elementwse'(t1,"Assumptions",t2)) = it;
   679 (* val Appl (Check_elementwse'(t1,"Assumptions",t2)) = it;
   680    val (vvv,ppp) = vp;
   680    val (vvv,ppp) = vp;
   681 
   681 
   682    val Check_elementwise pred = m;
   682    val Check_elementwise pred = m;
   733       in Appl (Or_to_List' (f, ls)) end) 
   733       in Appl (Or_to_List' (f, ls)) end) 
   734      handle _ => Notappl ("'Or_to_List' not applicable to "^(term2str f))
   734      handle _ => Notappl ("'Or_to_List' not applicable to "^(term2str f))
   735   end
   735   end
   736 
   736 
   737   | applicable_in p pt (Collect_Trues) = 
   737   | applicable_in p pt (Collect_Trues) = 
   738   raise error ("applicable_in: not impl. for "^
   738   error ("applicable_in: not impl. for "^
   739 	       (tac2str (Collect_Trues)))
   739 	       (tac2str (Collect_Trues)))
   740 
   740 
   741   | applicable_in p pt (Empty_Tac) = 
   741   | applicable_in p pt (Empty_Tac) = 
   742   Notappl "Empty_Tac is not applicable"
   742   Notappl "Empty_Tac is not applicable"
   743 
   743 
   769     | _ => Appl (Tac_ (thy, term2str f, id, term2str f)) end
   769     | _ => Appl (Tac_ (thy, term2str f, id, term2str f)) end
   770 
   770 
   771   | applicable_in p pt End_Proof' = Appl End_Proof''
   771   | applicable_in p pt End_Proof' = Appl End_Proof''
   772 
   772 
   773   | applicable_in _ _ m = 
   773   | applicable_in _ _ m = 
   774   raise error ("applicable_in called for "^(tac2str m));
   774   error ("applicable_in called for "^(tac2str m));
   775 
   775 
   776 (*WN060614 unused*)
   776 (*WN060614 unused*)
   777 fun tac2tac_ pt p m = 
   777 fun tac2tac_ pt p m = 
   778     case applicable_in p pt m of
   778     case applicable_in p pt m of
   779 	Appl (m') => m' 
   779 	Appl (m') => m' 
   780       | Notappl _ => raise error ("tac2mstp': fails with"^
   780       | Notappl _ => error ("tac2mstp': fails with"^
   781 				  (tac2str m));
   781 				  (tac2str m));
   782 
   782