test/Tools/isac/Interpret/lucas-interpreter.sml
changeset 60567 bb3140a02f3d
parent 60559 aba19e46dd84
child 60569 f5454fd2e013
equal deleted inserted replaced
60566:04f8699d2c9d 60567:bb3140a02f3d
    22 val p = e_pos'; val c = []; 
    22 val p = e_pos'; val c = []; 
    23 val (p,_,f,nxt,_,pt) = 
    23 val (p,_,f,nxt,_,pt) = 
    24     CalcTreeTEST 
    24     CalcTreeTEST 
    25         [(["functionTerm (x \<up> 2 + 1)", "integrateBy x", "antiDerivative FF"],
    25         [(["functionTerm (x \<up> 2 + 1)", "integrateBy x", "antiDerivative FF"],
    26           ("Integrate", ["integrate", "function"], ["diff", "integration"]))];
    26           ("Integrate", ["integrate", "function"], ["diff", "integration"]))];
    27 val (p,_,f,nxt,_,pt) = me nxt p c pt; (*nxt = ("Tac ", ...) --> Add_Given...*)
    27 val (p,_,f,nxt,_,pt) = me nxt p c pt; (*\<rightarrow> Add_Given "functionTerm (x \<up> 2 + 1)"*)
    28 val (p,_,f,nxt,_,pt) = me nxt p c pt;
    28 val (p,_,f,nxt,_,pt) = me nxt p c pt;
    29 val (p,_,f,nxt,_,pt) = me nxt p c pt;
    29 val (p,_,f,nxt,_,pt) = me nxt p c pt;
    30 val (p,_,f,nxt,_,pt) = me nxt p c pt;
    30 val (p,_,f,nxt,_,pt) = me nxt p c pt;
    31 val (p,_,f,nxt,_,pt) = me nxt p c pt;
    31 val (p,_,f,nxt,_,pt) = me nxt p c pt;
    32 val (p,_,f,nxt,_,pt) = me nxt p c pt;
    32 
    33 val (p,_,f,nxt,_,pt) = me nxt p c pt;
    33 val (p''',_,f,nxt''',_,pt''') = me nxt p c pt; (*nxt'''= Specify_Method ["diff", "integration"]*)
       
    34 (*/------------------- step into me Specify_Method ["diff", "integration"] -----------------\*)
       
    35 "~~~~~ fun me , args:"; val (tac, p, _, pt) = (nxt''', p''', c, pt''');
       
    36       val (pt, p) = 
       
    37   	    (*Step.by_tactic is here for testing by me; do_next would suffice in me*)
       
    38   	    case Step.by_tactic tac (pt, p) of
       
    39   		    ("ok", (_, _, ptp)) => ptp
       
    40 
       
    41 val ("ok", ([(Apply_Method ["diff", "integration"], _, _)], _, _)) = (*case*) 
       
    42       Step.do_next p ((pt, Pos.e_pos'), []) (*of*);
       
    43 "~~~~~ fun do_next , args:"; val ((ip as (_, p_)), (ptp as (pt, p), tacis))
       
    44   = (p, ((pt, Pos.e_pos'), []));
       
    45   (*if*) Pos.on_calc_end ip (*else*);
       
    46       val (_, probl_id, _) = Calc.references (pt, p);
       
    47 val _ =
       
    48       (*case*) tacis (*of*);
       
    49         (*if*) probl_id = Problem.id_empty (*else*);
       
    50 
       
    51 val ("ok", ([(Apply_Method ["diff", "integration"], _, _)], _, _)) =
       
    52       Step.switch_specify_solve p_ (pt, ip);
       
    53 "~~~~~ fun switch_specify_solve , args:"; val (state_pos, (pt, input_pos)) = (p_, (pt, ip));
       
    54       (*if*) Pos.on_specification ([], state_pos) (*then*);
       
    55 
       
    56       Step.specify_do_next (pt, input_pos);
       
    57 "~~~~~ fun specify_do_next , args:"; val (ptp as (pt, (p, p_))) = (pt, input_pos);
       
    58     val (_, (p_', tac)) = Specify.find_next_step ptp
       
    59     val ist_ctxt =  Ctree.get_loc pt (p, p_)
       
    60 val Tactic.Apply_Method mI =
       
    61     (*case*) tac (*of*);
       
    62 
       
    63 val ("ok", ([(Apply_Method ["diff", "integration"], _, _)], _, _)) =
       
    64   	    LI.by_tactic (Tactic.Apply_Method' (mI, NONE, Istate.empty, ContextC.empty))
       
    65   	      ist_ctxt (pt, (p, p_'));
       
    66 "~~~~~ fun by_tactic , args:"; val ((Tactic.Apply_Method' (mI, _, _, _)), (_, ctxt), (pt, pos as (p, _)))
       
    67   = ((Tactic.Apply_Method' (mI, NONE, Istate.empty, ContextC.empty)),
       
    68   	      ist_ctxt, (pt, (p, p_')));
       
    69          val (itms, oris, probl) = case get_obj I pt p of (*STILL asms=[]*)
       
    70            PblObj {meth = itms, origin = (oris, _, _), probl, ...} => (itms, oris, probl)
       
    71          | _ => raise ERROR "LI.by_tactic Apply_Method': uncovered case get_obj"
       
    72          val {ppc, ...} = MethodC.from_store ctxt mI;
       
    73          val itms = if itms <> [] then itms else I_Model.complete oris probl [] ppc
       
    74          val srls = LItool.get_simplifier (pt, pos)
       
    75          val (is, env, ctxt, prog) = case LItool.init_pstate srls ctxt itms mI of
       
    76            (is as Pstate {env, ...}, ctxt, scr) => (is, env, ctxt, scr)
       
    77          | _ => raise ERROR "LI.by_tactic Apply_Method': uncovered case init_pstate"
       
    78         val ini = LItool.implicit_take prog env;
       
    79         val pos = start_new_level pos
       
    80 val NONE =
       
    81         (*case*) ini (*of*);
       
    82 
       
    83 val Next_Step (iii, ccc, ttt) = (*case*) 
       
    84         LI.find_next_step prog (pt, (lev_dn p, Res)) is ctxt (*of*);
       
    85 "~~~~~ fun find_next_step , args:"; val ((Rule.Prog prog), (ptp as (pt, pos as (p, _))), (Pstate ist), ctxt)
       
    86   = (prog, (pt, (lev_dn p, Res)), is, ctxt);
       
    87 
       
    88       (*case*)
       
    89            scan_to_tactic (prog, (ptp, ctxt)) (Pstate ist) (*of*);
       
    90 "~~~~~ fun scan_to_tactic , args:"; val ((prog, cc), (Pstate (ist as {path, ...})))
       
    91   = ((prog, (ptp, ctxt)), (Pstate ist));
       
    92   (*if*) path = [] (*then*);
       
    93 
       
    94 val Accept_Tac (ttt, sss, ccc) =
       
    95            scan_dn cc (trans_scan_dn ist) (Program.body_of prog);
       
    96 "~~~~~ fun scan_dn , args:"; val (cc, ist, (Const (\<^const_name>\<open>Let\<close>(*1*), _) $ e $ (Abs (i, T, b))))
       
    97   = (cc, (trans_scan_dn ist), (Program.body_of prog));
       
    98 
       
    99 val Accept_Tac (ttt, sss, ccc) = (*case*)
       
   100            scan_dn cc (ist |> path_down [L, R]) e (*of*);
       
   101 "~~~~~ fun scan_dn , args:"; val ((cc as (_, ctxt)), (ist as {eval, ...}), t)
       
   102   = (cc, (ist |> path_down [L, R]), e);
       
   103     (*if*) Tactical.contained_in t (*else*);
       
   104 val (Program.Tac prog_tac, form_arg) =
       
   105       (*case*)  LItool.check_leaf "next  " ctxt eval (get_subst ist) t (*of*);
       
   106 
       
   107 val Accept_Tac (ttt, sss, ccc) =
       
   108            check_tac cc ist (prog_tac, form_arg);
       
   109 "~~~~~ fun check_tac , args:"; val (((pt, p), ctxt), ist, (prog_tac, form_arg))
       
   110   = (cc, ist, (prog_tac, form_arg));
       
   111     val m = LItool.tac_from_prog pt (Proof_Context.theory_of ctxt) prog_tac
       
   112 val _ =
       
   113     (*case*) m (*of*);
       
   114 
       
   115       (*case*)
       
   116 Solve_Step.check m (pt, p) (*of*);
       
   117 "~~~~~ fun check , args:"; val ((Tactic.Take str), (pt, pos as (p_, p))) = (m, (pt, p));
       
   118 
       
   119 (*+*)val ([0], Res) = pos; (*<<<-------------------------*)
       
   120 (*-------------------- stop step into me Specify_Method ["diff", "integration"] -------------*)
       
   121 (*\------------------- step into me Specify_Method ["diff", "integration"] -----------------/*)
       
   122 
       
   123 val (p,_,f,nxt,_,pt) = me nxt''' p''' c pt''';
    34 case nxt of (Apply_Method ["diff", "integration"]) => ()
   124 case nxt of (Apply_Method ["diff", "integration"]) => ()
    35           | _ => error "integrate.sml -- me method [diff,integration] -- spec";
   125           | _ => error "integrate.sml -- me method [diff,integration] -- spec";
    36 "----- step 8: returns nxt = Rewrite_Set_Inst ([\"(''bdv'', x)\"],\"integration\")";
   126 "----- step 8: returns nxt = Rewrite_Set_Inst ([\"(''bdv'', x)\"],\"integration\")";
    37 
   127 
    38 "~~~~~ fun me, args:"; val (tac, (p:pos'), _, (pt:ctree)) = (nxt, p, c, pt);
   128 "~~~~~ fun me, args:"; val (tac, (p:pos'), _, (pt:ctree)) = (nxt, p, c, pt);