49 val (ctxt, o_model, pI') = case Ctree.get_obj I pt p of |
49 val (ctxt, o_model, pI') = case Ctree.get_obj I pt p of |
50 Ctree.PblObj {ctxt, origin = (o_model, (_, pI', _), _), ...} => (ctxt, o_model, pI') |
50 Ctree.PblObj {ctxt, origin = (o_model, (_, pI', _), _), ...} => (ctxt, o_model, pI') |
51 | _ => raise ERROR "Specify_Step.check Model_Problem: uncovered case Ctree.get_obj" |
51 | _ => raise ERROR "Specify_Step.check Model_Problem: uncovered case Ctree.get_obj" |
52 val {model = model_patt, ...} = Problem.from_store (Ctree.get_ctxt pt pos) pI' |
52 val {model = model_patt, ...} = Problem.from_store (Ctree.get_ctxt pt pos) pI' |
53 val pbl = I_Model.init_POS ctxt o_model model_patt |
53 val pbl = I_Model.init_POS ctxt o_model model_patt |
54 in Applicable.Yes (Tactic.Model_Problem' (pI', I_Model.TEST_to_OLD pbl, [])) end |
54 in Applicable.Yes (Tactic.Model_Problem' (pI', pbl, [])) end |
55 | check (Tactic.Refine_Problem pI) (pt, (p, _)) = |
55 | check (Tactic.Refine_Problem pI) (pt, (p, _)) = |
56 let |
56 let |
57 val (dI, dI', itms, ctxt) = case Ctree.get_obj I pt p of |
57 val (dI, dI', itms, ctxt) = case Ctree.get_obj I pt p of |
58 Ctree.PblObj {origin = (_, (dI, _, _), _), spec = (dI', _, _), probl = itms, ctxt, ...} |
58 Ctree.PblObj {origin = (_, (dI, _, _), _), spec = (dI', _, _), probl = itms, ctxt, ...} |
59 => (dI, dI', itms, ctxt) |
59 => (dI, dI', itms, ctxt) |
83 end |
83 end |
84 | check (Tactic.Specify_Method mID) (ctree, pos) = |
84 | check (Tactic.Specify_Method mID) (ctree, pos) = |
85 let |
85 let |
86 val (o_model, _, i_model) = complete_for mID (ctree, pos) |
86 val (o_model, _, i_model) = complete_for mID (ctree, pos) |
87 in |
87 in |
88 Applicable.Yes (Tactic.Specify_Method' (mID, o_model, I_Model.TEST_to_OLD i_model)) |
88 Applicable.Yes (Tactic.Specify_Method' (mID, o_model, i_model)) |
89 end |
89 end |
90 | check (Tactic.Specify_Problem pID) (pt, pos as (p, _)) = |
90 | check (Tactic.Specify_Problem pID) (pt, pos as (p, _)) = |
91 let |
91 let |
92 val (oris, pI, pI', probl, meth, ctxt) = case Ctree.get_obj I pt p of |
92 val (oris, pI, pI', probl, meth, ctxt) = case Ctree.get_obj I pt p of |
93 Ctree.PblObj {origin = (oris, (_, pI, _), _), spec = (_, pI', _), probl, meth, ctxt, ...} |
93 Ctree.PblObj {origin = (oris, (_, pI, _), _), spec = (_, pI', _), probl, meth, ctxt, ...} |
112 end; |
112 end; |
113 |
113 |
114 (* exceed line length, because result type will change *) |
114 (* exceed line length, because result type will change *) |
115 fun add (Tactic.Model_Problem' (_, itms, met)) (_, ctxt) (pt, pos as (p, _)) = |
115 fun add (Tactic.Model_Problem' (_, itms, met)) (_, ctxt) (pt, pos as (p, _)) = |
116 let |
116 let |
117 val pt = Ctree.update_pbl pt p itms |
117 val pt = Ctree.update_pbl pt p (I_Model.TEST_to_OLD itms) |
118 val pt = Ctree.update_met pt p met |
118 val pt = Ctree.update_met pt p (I_Model.TEST_to_OLD met) |
119 in |
119 in |
120 (pos, [], Test_Out.PpcKF (Test_Out.Upblmet, P_Model.from (Proof_Context.theory_of ctxt) [] []), pt) |
120 (pos, [], Test_Out.PpcKF (Test_Out.Upblmet, P_Model.from (Proof_Context.theory_of ctxt) [] []), pt) |
121 end |
121 end |
122 | add (Tactic.Add_Given' (_, itmlist)) (_, ctxt) (pt, pos as (p, p_)) = |
122 | add (Tactic.Add_Given' (_, itmlist)) (_, ctxt) (pt, pos as (p, p_)) = |
123 (pos, [], Test_Out.PpcKF (Test_Out.Upblmet,P_Model.from (Proof_Context.theory_of ctxt) [][]), |
123 (pos, [], Test_Out.PpcKF (Test_Out.Upblmet,P_Model.from (Proof_Context.theory_of ctxt) [][]), |
124 case p_ of |
124 case p_ of |
125 Pos.Pbl => Ctree.update_pbl pt p itmlist |
125 Pos.Pbl => Ctree.update_pbl pt p (I_Model.TEST_to_OLD itmlist) |
126 | Pos.Met => Ctree.update_met pt p itmlist |
126 | Pos.Met => Ctree.update_met pt p (I_Model.TEST_to_OLD itmlist) |
127 | _ => raise ERROR ("uncovered case " ^ Pos.pos_2str p_)) |
127 | _ => raise ERROR ("uncovered case " ^ Pos.pos_2str p_)) |
128 | add (Tactic.Add_Find' (_, itmlist)) (_, ctxt) (pt, pos as (p, p_)) = |
128 | add (Tactic.Add_Find' (_, itmlist)) (_, ctxt) (pt, pos as (p, p_)) = |
129 (pos, [], (Test_Out.PpcKF (Test_Out.Upblmet, P_Model.from (Proof_Context.theory_of ctxt) [] [])), |
129 (pos, [], (Test_Out.PpcKF (Test_Out.Upblmet, P_Model.from (Proof_Context.theory_of ctxt) [] [])), |
130 case p_ of |
130 case p_ of |
131 Pos.Pbl => Ctree.update_pbl pt p itmlist |
131 Pos.Pbl => Ctree.update_pbl pt p (I_Model.TEST_to_OLD itmlist) |
132 | Pos.Met => Ctree.update_met pt p itmlist |
132 | Pos.Met => Ctree.update_met pt p (I_Model.TEST_to_OLD itmlist) |
133 | _ => raise ERROR ("uncovered case " ^ Pos.pos_2str p_)) |
133 | _ => raise ERROR ("uncovered case " ^ Pos.pos_2str p_)) |
134 | add (Tactic.Add_Relation' (_, itmlist)) (_, ctxt) (pt, pos as (p, p_)) = |
134 | add (Tactic.Add_Relation' (_, itmlist)) (_, ctxt) (pt, pos as (p, p_)) = |
135 (pos, [], Test_Out.PpcKF (Test_Out.Upblmet, P_Model.from (Proof_Context.theory_of ctxt) [] []), |
135 (pos, [], Test_Out.PpcKF (Test_Out.Upblmet, P_Model.from (Proof_Context.theory_of ctxt) [] []), |
136 case p_ of |
136 case p_ of |
137 Pos.Pbl => Ctree.update_pbl pt p itmlist |
137 Pos.Pbl => Ctree.update_pbl pt p (I_Model.TEST_to_OLD itmlist) |
138 | Pos.Met => Ctree.update_met pt p itmlist |
138 | Pos.Met => Ctree.update_met pt p (I_Model.TEST_to_OLD itmlist) |
139 | _ => raise ERROR ("uncovered case " ^ Pos.pos_2str p_)) |
139 | _ => raise ERROR ("uncovered case " ^ Pos.pos_2str p_)) |
140 | add (Tactic.Specify_Theory' domID) (_, ctxt) (pt, pos as (p,_)) = |
140 | add (Tactic.Specify_Theory' domID) (_, ctxt) (pt, pos as (p,_)) = |
141 (pos, [] , Test_Out.PpcKF (Test_Out.Upblmet, P_Model.from (Proof_Context.theory_of ctxt) [] []), |
141 (pos, [] , Test_Out.PpcKF (Test_Out.Upblmet, P_Model.from (Proof_Context.theory_of ctxt) [] []), |
142 Ctree.update_domID pt p domID) |
142 Ctree.update_domID pt p domID) |
143 | add (Tactic.Specify_Problem' (pI, (_, (itms, _)))) (_, ctxt) (pt, (p, _)) = |
143 | add (Tactic.Specify_Problem' (pI, (_, (itms, _)))) (_, ctxt) (pt, (p, _)) = |
144 let |
144 let |
145 val pt = Ctree.update_pbl pt p itms |
145 val pt = Ctree.update_pbl pt p (I_Model.TEST_to_OLD itms) |
146 val pt = Ctree.update_pblID pt p pI |
146 val pt = Ctree.update_pblID pt p pI |
147 in |
147 in |
148 ((p, Pos.Pbl), [], Test_Out.PpcKF (Test_Out.Upblmet, P_Model.from (Proof_Context.theory_of ctxt) [] []), pt) |
148 ((p, Pos.Pbl), [], Test_Out.PpcKF (Test_Out.Upblmet, P_Model.from (Proof_Context.theory_of ctxt) [] []), pt) |
149 end |
149 end |
150 | add (Tactic.Specify_Method' (mID, oris, itms)) (_, ctxt) (pt, (p, _)) = |
150 | add (Tactic.Specify_Method' (mID, oris, itms)) (_, ctxt) (pt, (p, _)) = |
151 let |
151 let |
152 val pt = Ctree.update_oris pt p oris |
152 val pt = Ctree.update_oris pt p oris |
153 val pt = Ctree.update_met pt p itms |
153 val pt = Ctree.update_met pt p (I_Model.TEST_to_OLD itms) |
154 val pt = Ctree.update_metID pt p mID |
154 val pt = Ctree.update_metID pt p mID |
155 in |
155 in |
156 ((p, Pos.Met), [], Test_Out.PpcKF (Test_Out.Upblmet, P_Model.from (Proof_Context.theory_of ctxt) [] []), pt) |
156 ((p, Pos.Met), [], Test_Out.PpcKF (Test_Out.Upblmet, P_Model.from (Proof_Context.theory_of ctxt) [] []), pt) |
157 end |
157 end |
158 | add (Tactic.Refine_Tacitly' (_, pIre, domID, metID, pbl)) (_, ctxt) (pt, pos as (p, _)) = |
158 | add (Tactic.Refine_Tacitly' (_, pIre, domID, metID, pbl)) (_, ctxt) (pt, pos as (p, _)) = |
159 let |
159 let |
160 val pt = Ctree.update_pbl pt p pbl |
160 val pt = Ctree.update_pbl pt p (I_Model.TEST_to_OLD pbl) |
161 val pt = Ctree.update_orispec pt p (domID, pIre, metID) |
161 val pt = Ctree.update_orispec pt p (domID, pIre, metID) |
162 in |
162 in |
163 (pos, [], Test_Out.PpcKF (Test_Out.Upblmet, P_Model.from (Proof_Context.theory_of ctxt) [] []), pt) |
163 (pos, [], Test_Out.PpcKF (Test_Out.Upblmet, P_Model.from (Proof_Context.theory_of ctxt) [] []), pt) |
164 end |
164 end |
165 | add (Tactic.Refine_Problem' (pI, _)) (_, ctxt) (pt, pos as (p, _)) = |
165 | add (Tactic.Refine_Problem' (pI, _)) (_, ctxt) (pt, pos as (p, _)) = |