e0726734@42026
|
1 |
|
neuper@42023
|
2 |
theory All_Ctxt imports Isac begin
|
neuper@42023
|
3 |
|
neuper@42023
|
4 |
text {* all changes of context are demonstrated in a mini example.
|
neuper@42023
|
5 |
see test/../mstools.sml --- all ctxt changes in minimsubpbl x+1=2 --- *}
|
neuper@42023
|
6 |
|
neuper@42023
|
7 |
section {* start of the mini example *}
|
neuper@42023
|
8 |
|
neuper@42023
|
9 |
ML {*
|
neuper@42033
|
10 |
val fmz = ["equality (x+1=(2::real))", "solveFor x", "solutions L"];
|
neuper@42023
|
11 |
val (dI',pI',mI') =
|
neuper@42023
|
12 |
("Test", ["sqroot-test","univariate","equation","test"],
|
neuper@42023
|
13 |
["Test","squ-equ-test-subpbl1"]);
|
neuper@42023
|
14 |
val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
|
neuper@42023
|
15 |
*}
|
neuper@42023
|
16 |
|
neuper@42023
|
17 |
section {* start of specify phase *}
|
neuper@42023
|
18 |
text {* variables known from formalisation provide type-inference
|
neuper@42023
|
19 |
for further input *}
|
neuper@42023
|
20 |
|
neuper@42023
|
21 |
ML {*
|
neuper@42023
|
22 |
val ctxt = get_ctxt pt p;
|
neuper@42023
|
23 |
val SOME known_x = parseNEW ctxt "x + y + z";
|
neuper@42023
|
24 |
val SOME unknown = parseNEW ctxt "a + b + c";
|
neuper@42103
|
25 |
if type_of known_x = HOLogic.realT andalso
|
neuper@42103
|
26 |
type_of unknown = TFree ("'a",["Groups.plus"])
|
neuper@42103
|
27 |
then () else error "All_Ctx: type constraints beginning specification of root-problem ";
|
neuper@42023
|
28 |
*}
|
neuper@42023
|
29 |
|
neuper@42023
|
30 |
ML {*
|
neuper@42023
|
31 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42023
|
32 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42023
|
33 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42023
|
34 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42023
|
35 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42023
|
36 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42023
|
37 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42023
|
38 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42023
|
39 |
*}
|
neuper@42023
|
40 |
|
neuper@42023
|
41 |
section {* start interpretation of method *}
|
neuper@42023
|
42 |
text {* preconditions are known at start of interpretation of (root-)method *}
|
neuper@42023
|
43 |
|
neuper@42023
|
44 |
ML {*
|
neuper@42103
|
45 |
if terms2strs (get_assumptions_ pt p) = ["precond_rootmet x"]
|
neuper@42103
|
46 |
then () else error "All_Ctx: asms after start interpretation of root-method";
|
neuper@42023
|
47 |
*}
|
neuper@42023
|
48 |
|
neuper@42023
|
49 |
ML {*
|
neuper@42092
|
50 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42092
|
51 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42092
|
52 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42023
|
53 |
*}
|
neuper@42023
|
54 |
|
neuper@42023
|
55 |
section {* start a subproblem: specification *}
|
neuper@42092
|
56 |
text {*
|
neuper@42092
|
57 |
ctxt is initialised from the thy in "SubProblem (thy, pbl, met) args"
|
neuper@42092
|
58 |
and extended with the types of the variables in args. *}
|
neuper@42023
|
59 |
|
neuper@42092
|
60 |
ML {* (*not significant in this example*)
|
neuper@42023
|
61 |
val ctxt = get_ctxt pt p;
|
neuper@42023
|
62 |
val SOME known_x = parseNEW ctxt "x+y+z";
|
neuper@42023
|
63 |
val SOME unknown = parseNEW ctxt "a+b+c";
|
neuper@42103
|
64 |
if type_of known_x = HOLogic.realT andalso
|
neuper@42103
|
65 |
type_of unknown = TFree ("'a",["Groups.plus"])
|
neuper@42103
|
66 |
then () else error "All_Ctx: type constraints beginning specification of SubProblem ";
|
neuper@42023
|
67 |
*}
|
neuper@42023
|
68 |
|
neuper@42023
|
69 |
ML {*
|
neuper@42023
|
70 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42023
|
71 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42023
|
72 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42023
|
73 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42023
|
74 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42023
|
75 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42023
|
76 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42023
|
77 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42023
|
78 |
*}
|
neuper@42023
|
79 |
|
neuper@42023
|
80 |
section {* interpretation of subproblem's method *}
|
neuper@42023
|
81 |
|
neuper@42023
|
82 |
text {* preconds are known at start of interpretation of (sub-)method *}
|
neuper@42023
|
83 |
|
neuper@42023
|
84 |
ML {*
|
neuper@42103
|
85 |
if terms2strs (get_assumptions_ pt p) = ["matches (?a = ?b) (-1 + x = 0)"]
|
neuper@42103
|
86 |
then () else error "All_Ctx: asms after start interpretation of SubProblem";
|
neuper@42023
|
87 |
*}
|
neuper@42023
|
88 |
|
neuper@42023
|
89 |
ML {*
|
neuper@42023
|
90 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42023
|
91 |
*}
|
neuper@42023
|
92 |
|
neuper@42023
|
93 |
ML {*
|
neuper@42023
|
94 |
"artifically inject assumptions";
|
neuper@42023
|
95 |
val (SOME (iform, cform), SOME (ires, cres)) = get_obj g_loc pt (fst p);
|
neuper@42023
|
96 |
val ctxt = insert_assumptions [str2term "x < sub_asm_out",
|
neuper@42023
|
97 |
str2term "a < sub_asm_local"] cres;
|
neuper@42023
|
98 |
val pt = update_loc' pt (fst p) (SOME (iform, cform), SOME (ires, ctxt));
|
neuper@42023
|
99 |
*}
|
neuper@42023
|
100 |
|
neuper@42033
|
101 |
ML {*
|
neuper@42023
|
102 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42023
|
103 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42023
|
104 |
*}
|
neuper@42023
|
105 |
|
neuper@42023
|
106 |
section {* finish subproblem, return to calling method*}
|
neuper@42023
|
107 |
|
neuper@42023
|
108 |
text {* transfer non-local assumptions and result from sub-method to root-method.
|
neuper@42023
|
109 |
non-local assumptions are those contaning a variable known in root-method.
|
neuper@42023
|
110 |
*}
|
neuper@42023
|
111 |
|
neuper@42023
|
112 |
ML {*
|
neuper@42103
|
113 |
if terms2strs (get_assumptions_ pt p) =
|
neuper@42103
|
114 |
["matches (?a = ?b) (-1 + x = 0)", "x < sub_asm_out", "x = 1", "precond_rootmet x"]
|
neuper@42103
|
115 |
then () else error "All_Ctx: asms after finishing SubProblem";
|
neuper@42023
|
116 |
*}
|
neuper@42023
|
117 |
|
neuper@42023
|
118 |
ML {*
|
neuper@42023
|
119 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42023
|
120 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42023
|
121 |
*}
|
neuper@42023
|
122 |
|
neuper@42023
|
123 |
section {* finish Lucas interpretation *}
|
neuper@42023
|
124 |
|
neuper@42023
|
125 |
text {* assumptions collected during lucas-interpretation for proof of postcondition *}
|
neuper@42023
|
126 |
|
neuper@42023
|
127 |
ML {*
|
neuper@42103
|
128 |
if terms2strs (get_assumptions_ pt p) =
|
neuper@42103
|
129 |
["matches (?a = ?b) (-1 + x = 0)", "x < sub_asm_out", "x = 1", "precond_rootmet x"]
|
neuper@42103
|
130 |
then () else error "All_Ctx at final result";
|
neuper@42023
|
131 |
*}
|
neuper@42023
|
132 |
|
e0726734@42032
|
133 |
ML {*
|
e0726734@42032
|
134 |
show_pt pt;
|
e0726734@42032
|
135 |
*}
|
e0726734@42032
|
136 |
|
neuper@42023
|
137 |
end |