10 signature TACTIC = |
10 signature TACTIC = |
11 sig |
11 sig |
12 datatype T = |
12 datatype T = |
13 Add_Find' of TermC.as_string * Model.itm list | Add_Given' of TermC.as_string * Model.itm list |
13 Add_Find' of TermC.as_string * Model.itm list | Add_Given' of TermC.as_string * Model.itm list |
14 | Add_Relation' of TermC.as_string * Model.itm list |
14 | Add_Relation' of TermC.as_string * Model.itm list |
15 | Apply_Method' of Spec.metID * term option * Istate_Def.T * Proof.context |
15 | Apply_Method' of Method.id * term option * Istate_Def.T * Proof.context |
16 |
16 |
17 | Begin_Sequ' | Begin_Trans' of term |
17 | Begin_Sequ' | Begin_Trans' of term |
18 | Split_And' of term | Split_Or' of term | Split_Intersect' of term |
18 | Split_And' of term | Split_Or' of term | Split_Intersect' of term |
19 | Conclude_And' of term | Conclude_Or' of term | Collect_Trues' of term |
19 | Conclude_And' of term | Conclude_Or' of term | Collect_Trues' of term |
20 | End_Sequ' | End_Trans' of Selem.result |
20 | End_Sequ' | End_Trans' of Selem.result |
21 | End_Ruleset' of term | End_Intersect' of term | End_Proof'' |
21 | End_Ruleset' of term | End_Intersect' of term | End_Proof'' |
22 |
22 |
23 | CAScmd' of term |
23 | CAScmd' of term |
24 | Calculate' of ThyC.id * string * term * (term * ThmC.T) |
24 | Calculate' of ThyC.id * string * term * (term * ThmC.T) |
25 | Check_Postcond' of Spec.pblID * term |
25 | Check_Postcond' of Problem.id * term |
26 | Check_elementwise' of term * TermC.as_string * Selem.result |
26 | Check_elementwise' of term * TermC.as_string * Selem.result |
27 | Del_Find' of TermC.as_string | Del_Given' of TermC.as_string | Del_Relation' of TermC.as_string |
27 | Del_Find' of TermC.as_string | Del_Given' of TermC.as_string | Del_Relation' of TermC.as_string |
28 |
28 |
29 | Derive' of Rule_Set.T |
29 | Derive' of Rule_Set.T |
30 | Detail_Set' of ThyC.id * bool * Rule_Set.T * term * Selem.result |
30 | Detail_Set' of ThyC.id * bool * Rule_Set.T * term * Selem.result |
32 | End_Detail' of Selem.result |
32 | End_Detail' of Selem.result |
33 |
33 |
34 | Empty_Tac_ |
34 | Empty_Tac_ |
35 | Free_Solve' |
35 | Free_Solve' |
36 |
36 |
37 | Init_Proof' of TermC.as_string list * Spec.spec |
37 | Init_Proof' of TermC.as_string list * Spec.T |
38 | Model_Problem' of Spec.pblID * Model.itm list * Model.itm list |
38 | Model_Problem' of Problem.id * Model.itm list * Model.itm list |
39 | Or_to_List' of term * term |
39 | Or_to_List' of term * term |
40 | Refine_Problem' of Spec.pblID * (Model.itm list * (bool * term) list) |
40 | Refine_Problem' of Problem.id * (Model.itm list * (bool * term) list) |
41 | Refine_Tacitly' of Spec.pblID * Spec.pblID * ThyC.id * Spec.metID * Model.itm list |
41 | Refine_Tacitly' of Problem.id * Problem.id * ThyC.id * Method.id * Model.itm list |
42 |
42 |
43 | Rewrite' of ThyC.id * Rewrite_Ord.rew_ord' * Rule_Set.T * bool * ThmC.T * term * Selem.result |
43 | Rewrite' of ThyC.id * Rewrite_Ord.rew_ord' * Rule_Set.T * bool * ThmC.T * term * Selem.result |
44 | Rewrite_Inst' of ThyC.id * Rewrite_Ord.rew_ord' * Rule_Set.T * bool * UnparseC.subst * ThmC.T * term * Selem.result |
44 | Rewrite_Inst' of ThyC.id * Rewrite_Ord.rew_ord' * Rule_Set.T * bool * UnparseC.subst * ThmC.T * term * Selem.result |
45 | Rewrite_Set' of ThyC.id * bool * Rule_Set.T * term * Selem.result |
45 | Rewrite_Set' of ThyC.id * bool * Rule_Set.T * term * Selem.result |
46 | Rewrite_Set_Inst' of ThyC.id * bool * UnparseC.subst * Rule_Set.T * term * Selem.result |
46 | Rewrite_Set_Inst' of ThyC.id * bool * UnparseC.subst * Rule_Set.T * term * Selem.result |
47 |
47 |
48 | Specify_Method' of Spec.metID * Model.ori list * Model.itm list |
48 | Specify_Method' of Method.id * Model.ori list * Model.itm list |
49 | Specify_Problem' of Spec.pblID * (bool * (Model.itm list * (bool * term) list)) |
49 | Specify_Problem' of Problem.id * (bool * (Model.itm list * (bool * term) list)) |
50 | Specify_Theory' of ThyC.id |
50 | Specify_Theory' of ThyC.id |
51 | Subproblem' of |
51 | Subproblem' of |
52 Spec.spec * Model.ori list * |
52 Spec.T * Model.ori list * |
53 term * (* CAScmd, e.g. "solve (-1 + x = 0, x)" *) |
53 term * (* CAScmd, e.g. "solve (-1 + x = 0, x)" *) |
54 Selem.fmz_ * (* either input to root-probl. or derived from prog. in ??? *) |
54 Selem.fmz_ * (* either input to root-probl. or derived from prog. in ??? *) |
55 (*Istate.T * ? *) |
55 (*Istate.T * ? *) |
56 Proof.context * (* derived from prog. in ??? *) |
56 Proof.context * (* derived from prog. in ??? *) |
57 term (* ?UNUSED, e.g."Subproblem\n (''Test'',\n ??.\<^const>String.char.Char ''LINEAR'' ''univariate'' ''equation''\n ''test'')" *) |
57 term (* ?UNUSED, e.g."Subproblem\n (''Test'',\n ??.\<^const>String.char.Char ''LINEAR'' ''univariate'' ''equation''\n ''test'')" *) |
61 val string_of: T -> string |
61 val string_of: T -> string |
62 |
62 |
63 datatype input = |
63 datatype input = |
64 Add_Find of TermC.as_string | Add_Given of TermC.as_string | Add_Relation of TermC.as_string |
64 Add_Find of TermC.as_string | Add_Given of TermC.as_string | Add_Relation of TermC.as_string |
65 | Apply_Assumption of TermC.as_string list |
65 | Apply_Assumption of TermC.as_string list |
66 | Apply_Method of Spec.metID |
66 | Apply_Method of Method.id |
67 (*/--- TODO: re-design ? -----------------------------------------------------------------\*) |
67 (*/--- TODO: re-design ? -----------------------------------------------------------------\*) |
68 | Begin_Sequ | Begin_Trans |
68 | Begin_Sequ | Begin_Trans |
69 | Split_And | Split_Or | Split_Intersect |
69 | Split_And | Split_Or | Split_Intersect |
70 | Conclude_And | Conclude_Or | Collect_Trues |
70 | Conclude_And | Conclude_Or | Collect_Trues |
71 | End_Sequ | End_Trans |
71 | End_Sequ | End_Trans |
72 | End_Ruleset | End_Subproblem | End_Intersect | End_Proof' |
72 | End_Ruleset | End_Subproblem | End_Intersect | End_Proof' |
73 (*\--- TODO: re-design ? -----------------------------------------------------------------/*) |
73 (*\--- TODO: re-design ? -----------------------------------------------------------------/*) |
74 | CAScmd of TermC.as_string |
74 | CAScmd of TermC.as_string |
75 | Calculate of string |
75 | Calculate of string |
76 | Check_Postcond of Spec.pblID |
76 | Check_Postcond of Problem.id |
77 | Check_elementwise of TermC.as_string |
77 | Check_elementwise of TermC.as_string |
78 | Del_Find of TermC.as_string | Del_Given of TermC.as_string | Del_Relation of TermC.as_string |
78 | Del_Find of TermC.as_string | Del_Given of TermC.as_string | Del_Relation of TermC.as_string |
79 |
79 |
80 | Derive of Rule_Set.id |
80 | Derive of Rule_Set.id |
81 | Detail_Set of Rule_Set.id |
81 | Detail_Set of Rule_Set.id |
83 | End_Detail |
83 | End_Detail |
84 |
84 |
85 | Empty_Tac |
85 | Empty_Tac |
86 | Free_Solve |
86 | Free_Solve |
87 |
87 |
88 | Init_Proof of TermC.as_string list * Spec.spec |
88 | Init_Proof of TermC.as_string list * Spec.T |
89 | Model_Problem |
89 | Model_Problem |
90 | Or_to_List |
90 | Or_to_List |
91 | Refine_Problem of Spec.pblID |
91 | Refine_Problem of Problem.id |
92 | Refine_Tacitly of Spec.pblID |
92 | Refine_Tacitly of Problem.id |
93 |
93 |
94 | Rewrite of ThmC.T |
94 | Rewrite of ThmC.T |
95 | Rewrite_Inst of Selem.subs * ThmC.T |
95 | Rewrite_Inst of Selem.subs * ThmC.T |
96 | Rewrite_Set of Rule_Set.id |
96 | Rewrite_Set of Rule_Set.id |
97 | Rewrite_Set_Inst of Selem.subs * Rule_Set.id |
97 | Rewrite_Set_Inst of Selem.subs * Rule_Set.id |
98 |
98 |
99 | Specify_Method of Spec.metID |
99 | Specify_Method of Method.id |
100 | Specify_Problem of Spec.pblID |
100 | Specify_Problem of Problem.id |
101 | Specify_Theory of ThyC.id |
101 | Specify_Theory of ThyC.id |
102 | Subproblem of ThyC.id * Spec.pblID |
102 | Subproblem of ThyC.id * Problem.id |
103 |
103 |
104 | Substitute of Selem.sube |
104 | Substitute of Selem.sube |
105 | Tac of string |
105 | Tac of string |
106 | Take of TermC.as_string | Take_Inst of TermC.as_string |
106 | Take of TermC.as_string | Take_Inst of TermC.as_string |
107 val input_to_string : input -> string |
107 val input_to_string : input -> string |
144 see 'type tac_' for the internal representation of tactics |
144 see 'type tac_' for the internal representation of tactics |
145 *) |
145 *) |
146 datatype input = |
146 datatype input = |
147 Add_Find of TermC.as_string | Add_Given of TermC.as_string | Add_Relation of TermC.as_string |
147 Add_Find of TermC.as_string | Add_Given of TermC.as_string | Add_Relation of TermC.as_string |
148 | Apply_Assumption of TermC.as_string list |
148 | Apply_Assumption of TermC.as_string list |
149 | Apply_Method of Spec.metID |
149 | Apply_Method of Method.id |
150 (* creates an "istate" in PblObj.env; in case of "implicit_take" |
150 (* creates an "istate" in PblObj.env; in case of "implicit_take" |
151 creates a formula at ((lev_on o lev_dn) p, Frm) and in this "ppobj.loc" |
151 creates a formula at ((lev_on o lev_dn) p, Frm) and in this "ppobj.loc" |
152 a "SOME istate" at fst of "loc". |
152 a "SOME istate" at fst of "loc". |
153 As each step (in the solve-phase) has a resulting formula (at the front-end) |
153 As each step (in the solve-phase) has a resulting formula (at the front-end) |
154 Apply_Method also does the 1st step in the script (an "initac") if there is no "implicit_take" *) |
154 Apply_Method also does the 1st step in the script (an "initac") if there is no "implicit_take" *) |
159 | End_Sequ | End_Trans |
159 | End_Sequ | End_Trans |
160 | End_Ruleset | End_Subproblem (* WN0509 drop *) | End_Intersect | End_Proof' |
160 | End_Ruleset | End_Subproblem (* WN0509 drop *) | End_Intersect | End_Proof' |
161 (*\--- TODO: re-design ? -----------------------------------------------------------------/*) |
161 (*\--- TODO: re-design ? -----------------------------------------------------------------/*) |
162 | CAScmd of TermC.as_string |
162 | CAScmd of TermC.as_string |
163 | Calculate of string |
163 | Calculate of string |
164 | Check_Postcond of Spec.pblID |
164 | Check_Postcond of Problem.id |
165 | Check_elementwise of TermC.as_string |
165 | Check_elementwise of TermC.as_string |
166 | Del_Find of TermC.as_string | Del_Given of TermC.as_string | Del_Relation of TermC.as_string |
166 | Del_Find of TermC.as_string | Del_Given of TermC.as_string | Del_Relation of TermC.as_string |
167 |
167 |
168 | Derive of Rule_Set.id (* WN0509 drop *) |
168 | Derive of Rule_Set.id (* WN0509 drop *) |
169 | Detail_Set of Rule_Set.id (* WN0509 drop *) |
169 | Detail_Set of Rule_Set.id (* WN0509 drop *) |
171 | End_Detail (* WN0509 drop *) |
171 | End_Detail (* WN0509 drop *) |
172 |
172 |
173 | Empty_Tac |
173 | Empty_Tac |
174 | Free_Solve |
174 | Free_Solve |
175 |
175 |
176 | Init_Proof of TermC.as_string list * Spec.spec |
176 | Init_Proof of TermC.as_string list * Spec.T |
177 | Model_Problem |
177 | Model_Problem |
178 | Or_to_List |
178 | Or_to_List |
179 | Refine_Problem of Spec.pblID |
179 | Refine_Problem of Problem.id |
180 | Refine_Tacitly of Spec.pblID |
180 | Refine_Tacitly of Problem.id |
181 |
181 |
182 (* rewrite-tactics can transport a (thmID, thm) to and (!) from the java-front-end |
182 (* rewrite-tactics can transport a (thmID, thm) to and (!) from the java-front-end |
183 because there all the thms are present with both (thmID, thm) |
183 because there all the thms are present with both (thmID, thm) |
184 (where user-views can show both or only one of (thmID, thm)), |
184 (where user-views can show both or only one of (thmID, thm)), |
185 and thm is created from ThmID by assoc_thm'' when entering isabisac *) |
185 and thm is created from ThmID by assoc_thm'' when entering isabisac *) |
186 | Rewrite of ThmC.T |
186 | Rewrite of ThmC.T |
187 | Rewrite_Inst of Selem.subs * ThmC.T |
187 | Rewrite_Inst of Selem.subs * ThmC.T |
188 | Rewrite_Set of Rule_Set.id |
188 | Rewrite_Set of Rule_Set.id |
189 | Rewrite_Set_Inst of Selem.subs * Rule_Set.id |
189 | Rewrite_Set_Inst of Selem.subs * Rule_Set.id |
190 |
190 |
191 | Specify_Method of Spec.metID |
191 | Specify_Method of Method.id |
192 | Specify_Problem of Spec.pblID |
192 | Specify_Problem of Problem.id |
193 | Specify_Theory of ThyC.id |
193 | Specify_Theory of ThyC.id |
194 | Subproblem of ThyC.id * Spec.pblID (* WN0509 drop *) |
194 | Subproblem of ThyC.id * Problem.id (* WN0509 drop *) |
195 |
195 |
196 | Substitute of Selem.sube |
196 | Substitute of Selem.sube |
197 | Tac of string (* WN0509 drop *) |
197 | Tac of string (* WN0509 drop *) |
198 | Take of TermC.as_string | Take_Inst of TermC.as_string |
198 | Take of TermC.as_string | Take_Inst of TermC.as_string |
199 |
199 |
337 Add_Find' of TermC.as_string * Model.itm list | Add_Given' of TermC.as_string * Model.itm list |
337 Add_Find' of TermC.as_string * Model.itm list | Add_Given' of TermC.as_string * Model.itm list |
338 | Add_Relation' of TermC.as_string * Model.itm list |
338 | Add_Relation' of TermC.as_string * Model.itm list |
339 | Apply_Method' of (* creates the 1st step visible in a (sub-) comprising |
339 | Apply_Method' of (* creates the 1st step visible in a (sub-) comprising |
340 * tactic Apply_Method metID |
340 * tactic Apply_Method metID |
341 * formula term *) |
341 * formula term *) |
342 Spec.metID * (* key for Know_Store *) |
342 Method.id * (* key for Know_Store *) |
343 term option * (* the first formula of Calc.T. TODO: rm option *) |
343 term option * (* the first formula of Calc.T. TODO: rm option *) |
344 Istate_Def.T * (* for the newly started program *) |
344 Istate_Def.T * (* for the newly started program *) |
345 Proof.context (* for the newly started program *) |
345 Proof.context (* for the newly started program *) |
346 (*/--- TODO: re-design ? -----------------------------------------------------------------\*) |
346 (*/--- TODO: re-design ? -----------------------------------------------------------------\*) |
347 | Begin_Sequ' | Begin_Trans' of term |
347 | Begin_Sequ' | Begin_Trans' of term |
350 | End_Sequ' | End_Trans' of Selem.result |
350 | End_Sequ' | End_Trans' of Selem.result |
351 | End_Ruleset' of term | End_Intersect' of term | End_Proof'' |
351 | End_Ruleset' of term | End_Intersect' of term | End_Proof'' |
352 (*\--- TODO: re-design ? -----------------------------------------------------------------/*) |
352 (*\--- TODO: re-design ? -----------------------------------------------------------------/*) |
353 | CAScmd' of term |
353 | CAScmd' of term |
354 | Calculate' of ThyC.id * string * term * (term * ThmC.T) |
354 | Calculate' of ThyC.id * string * term * (term * ThmC.T) |
355 | Check_Postcond' of Spec.pblID * |
355 | Check_Postcond' of Problem.id * |
356 term (* returnvalue of program in solve *) |
356 term (* returnvalue of program in solve *) |
357 | Check_elementwise' of (* DEPRECATED, made idle for Calc.T in df00a2b5c4cc *) |
357 | Check_elementwise' of (* DEPRECATED, made idle for Calc.T in df00a2b5c4cc *) |
358 term * (* (1) the current formula: [x=1,x=...] *) |
358 term * (* (1) the current formula: [x=1,x=...] *) |
359 string * (* (2) the pred from Check_elementwise *) |
359 string * (* (2) the pred from Check_elementwise *) |
360 Selem.result (* (3) composed from (1) and (2): {x. pred} *) |
360 Selem.result (* (3) composed from (1) and (2): {x. pred} *) |
366 | End_Detail' of Selem.result |
366 | End_Detail' of Selem.result |
367 |
367 |
368 | Empty_Tac_ |
368 | Empty_Tac_ |
369 | Free_Solve' |
369 | Free_Solve' |
370 |
370 |
371 | Init_Proof' of TermC.as_string list * Spec.spec |
371 | Init_Proof' of TermC.as_string list * Spec.T |
372 | Model_Problem' of (* first step in specifying *) |
372 | Model_Problem' of (* first step in specifying *) |
373 Spec.pblID * (* key into Know_Store *) |
373 Problem.id * (* key into Know_Store *) |
374 Model.itm list * (* the 'untouched' pbl *) |
374 Model.itm list * (* the 'untouched' pbl *) |
375 Model.itm list (* the casually completed met *) |
375 Model.itm list (* the casually completed met *) |
376 | Or_to_List' of term * term |
376 | Or_to_List' of term * term |
377 | Refine_Problem' of Spec.pblID * (Model.itm list * (bool * term) list) |
377 | Refine_Problem' of Problem.id * (Model.itm list * (bool * term) list) |
378 | Refine_Tacitly' of |
378 | Refine_Tacitly' of |
379 Spec.pblID * (* input *) |
379 Problem.id * (* input *) |
380 Spec.pblID * (* the refined from applicable_in *) |
380 Problem.id * (* the refined from applicable_in *) |
381 ThyC.id * (* from new pbt?! filled in specify *) |
381 ThyC.id * (* from new pbt?! filled in specify *) |
382 Spec.metID * (* from new pbt?! filled in specify *) |
382 Method.id * (* from new pbt?! filled in specify *) |
383 Model.itm list (* drop ! 9.03: remains [] for Model_Problem recognizing its activation *) |
383 Model.itm list (* drop ! 9.03: remains [] for Model_Problem recognizing its activation *) |
384 | Rewrite' of ThyC.id * Rewrite_Ord.rew_ord' * Rule_Set.T * bool * ThmC.T * term * Selem.result |
384 | Rewrite' of ThyC.id * Rewrite_Ord.rew_ord' * Rule_Set.T * bool * ThmC.T * term * Selem.result |
385 | Rewrite_Inst' of ThyC.id * Rewrite_Ord.rew_ord' * Rule_Set.T * bool * UnparseC.subst * ThmC.T * term * Selem.result |
385 | Rewrite_Inst' of ThyC.id * Rewrite_Ord.rew_ord' * Rule_Set.T * bool * UnparseC.subst * ThmC.T * term * Selem.result |
386 | Rewrite_Set' of ThyC.id * bool * Rule_Set.T * term * Selem.result |
386 | Rewrite_Set' of ThyC.id * bool * Rule_Set.T * term * Selem.result |
387 | Rewrite_Set_Inst' of ThyC.id * bool * UnparseC.subst * Rule_Set.T * term * Selem.result |
387 | Rewrite_Set_Inst' of ThyC.id * bool * UnparseC.subst * Rule_Set.T * term * Selem.result |
388 |
388 |
389 | Specify_Method' of Spec.metID * Model.ori list * Model.itm list |
389 | Specify_Method' of Method.id * Model.ori list * Model.itm list |
390 | Specify_Problem' of Spec.pblID * |
390 | Specify_Problem' of Problem.id * |
391 (bool * (* matches *) |
391 (bool * (* matches *) |
392 (Model.itm list * (* ppc *) |
392 (Model.itm list * (* ppc *) |
393 (bool * term) list)) (* preconditions marked true/false *) |
393 (bool * term) list)) (* preconditions marked true/false *) |
394 | Specify_Theory' of ThyC.id |
394 | Specify_Theory' of ThyC.id |
395 | Subproblem' of |
395 | Subproblem' of |
396 Spec.spec * |
396 Spec.T * |
397 (Model.ori list) * (* filled in associate Subproblem' *) |
397 (Model.ori list) * (* filled in associate Subproblem' *) |
398 term * (* filled -"-, headline of calc-head *) |
398 term * (* filled -"-, headline of calc-head *) |
399 Selem.fmz_ * (* string list from arguments *) |
399 Selem.fmz_ * (* string list from arguments *) |
400 Proof.context * (* for specify-phase *) |
400 Proof.context * (* for specify-phase *) |
401 term (* Subproblem (thyID, pbl) OR cascmd *) |
401 term (* Subproblem (thyID, pbl) OR cascmd *) |
423 |
423 |
424 | Specify_Theory' domID => "Specify_Theory' " ^ quote domID |
424 | Specify_Theory' domID => "Specify_Theory' " ^ quote domID |
425 | Specify_Problem' (pI, (ok, _)) => "Specify_Problem' " ^ |
425 | Specify_Problem' (pI, (ok, _)) => "Specify_Problem' " ^ |
426 spair2str (strs2str pI, spair2str (bool2str ok, spair2str ("itms2str_ itms", "items2str pre"))) |
426 spair2str (strs2str pI, spair2str (bool2str ok, spair2str ("itms2str_ itms", "items2str pre"))) |
427 | Specify_Method' (pI, oris, _) => "Specify_Method' (" ^ |
427 | Specify_Method' (pI, oris, _) => "Specify_Method' (" ^ |
428 Spec.metID2str pI ^ ", " ^ Model.oris2str oris ^ ", )" |
428 Method.id_to_string pI ^ ", " ^ Model.oris2str oris ^ ", )" |
429 |
429 |
430 | Apply_Method' (metID, _, _, _) => "Apply_Method' " ^ strs2str metID |
430 | Apply_Method' (metID, _, _, _) => "Apply_Method' " ^ strs2str metID |
431 | Check_Postcond' (pblID, scval) => "Check_Postcond' " ^ |
431 | Check_Postcond' (pblID, scval) => "Check_Postcond' " ^ |
432 (spair2str (strs2str pblID, UnparseC.term scval)) |
432 (spair2str (strs2str pblID, UnparseC.term scval)) |
433 |
433 |