test/Tools/isac/Interpret/mstools.sml
author Walther Neuper <neuper@ist.tugraz.at>
Sun, 18 Sep 2011 15:21:46 +0200
branchdecompose-isar
changeset 42272 dcc5d2601cf7
parent 42241 af3961d22dc8
child 48761 4162c4f6f897
permissions -rw-r--r--
dmeindl references
neuper@38036
     1
(* Title: tests for Interpret/mstools.sml
e0726734@41957
     2
   Author: Walther Neuper 100930, Mathias Lehnfeld
neuper@38036
     3
   (c) copyright due to lincense terms.
neuper@37906
     4
neuper@38036
     5
12345678901234567890123456789012345678901234567890123456789012345678901234567890
neuper@38036
     6
        10        20        30        40        50        60        70        80
neuper@38036
     7
*)
neuper@38036
     8
"--------------------------------------------------------";
neuper@38036
     9
"table of contents --------------------------------------";
neuper@38036
    10
"--------------------------------------------------------";
neuper@41990
    11
"----------- fun declare_constraints' -------------------";
bonzai@41941
    12
"----------- fun declare_constraints --------------------";
e0726734@41957
    13
"----------- fun get_assumptions, fun get_environments --";
neuper@42019
    14
"----------- fun transfer_asms_from_to ------------------";
neuper@42023
    15
"----------- fun from_subpbl_to_caller ------------------";
neuper@42019
    16
"----------- all ctxt changes in minimsubpbl x+1=2 ------";
neuper@41982
    17
"----------- go through Model_Problem until nxt_tac -----";
neuper@38036
    18
"--------------------------------------------------------";
neuper@38036
    19
"--------------------------------------------------------";
neuper@38036
    20
"--------------------------------------------------------";
bonzai@41941
    21
"--------------------------------------------------------";
neuper@37906
    22
neuper@37906
    23
neuper@41990
    24
"----------- fun declare_constraints' -------------------";
neuper@41990
    25
"----------- fun declare_constraints' -------------------";
neuper@41990
    26
"----------- fun declare_constraints' -------------------";
neuper@41990
    27
val ctxt = ProofContext.init_global @{theory "Isac"};
neuper@41990
    28
val SOME ta = parseNEW ctxt "x";
neuper@41990
    29
if type_of ta = TFree ("'a",[]) then () else error "TODO";
neuper@41990
    30
neuper@41990
    31
(*----- add a type constraint to ctxt *)
neuper@41990
    32
val SOME ti = parseNEW ctxt "x::int";
neuper@41990
    33
val ctxt = declare_constraints' [ti] ctxt;
neuper@41990
    34
neuper@41990
    35
(*----- now parsing infers the type *)
neuper@41990
    36
val SOME t = parseNEW ctxt "x";
neuper@41990
    37
if type_of t = Type ("Int.int",[]) then () else error "TODO";
neuper@41990
    38
bonzai@41941
    39
"----------- fun declare_constraints --------------------";
bonzai@41941
    40
"----------- fun declare_constraints --------------------";
bonzai@41941
    41
"----------- fun declare_constraints --------------------";
neuper@41973
    42
val ctxt = ProofContext.init_global @{theory "Isac"}
bonzai@41941
    43
      |> declare_constraints "xxx + yyy = (111::int)";
bonzai@41949
    44
val t = case parseNEW ctxt "xxx = 123" of
bonzai@41949
    45
      NONE => error "mstools: syntax error"
bonzai@41949
    46
    | SOME t' => t';
neuper@41942
    47
if ((lhs t) |> type_of) = @{typ int} then ()
bonzai@41941
    48
  else error "mstools: incorrect type inference from parseNEW ctxt";
neuper@37906
    49
neuper@42272
    50
val t_bit = Syntax.read_term ctxt "11::int";
neuper@42272
    51
val t_free = numbers_to_string t_bit;
neuper@42272
    52
val ctxt = ProofContext.init_global @{theory "Isac"};
neuper@42272
    53
val SOME t = parseNEW ctxt "11";
neuper@42272
    54
if (t |> type_of) = TFree ("'a", ["Int.number"]) then ()
neuper@42272
    55
else error "parsed numeral correct";
neuper@42272
    56
val ctxt' = Variable.declare_constraints t_free ctxt;
neuper@42272
    57
val SOME t' = parseNEW ctxt' "11";
neuper@42272
    58
if (t' |> type_of) = TFree ("'a", ["Int.number"]) then ()
neuper@42272
    59
else error "Variable.declare_constraints did not recognize numeral";
neuper@38036
    60
e0726734@41957
    61
"----------- fun get_assumptions, fun get_environments --";
e0726734@41957
    62
"----------- fun get_assumptions, fun get_environments --";
e0726734@41957
    63
"----------- fun get_assumptions, fun get_environments --";
e0726734@41957
    64
val ctxt = insert_assumptions
e0726734@41957
    65
      [@{term "x * v"}, @{term "2 * u"}, @{term "2 * u"}] ctxt;
neuper@41961
    66
val ctxt = insert_assumptions
neuper@41961
    67
      [@{term "x * v"}, @{term "2 * u"}] ctxt;
e0726734@41957
    68
val asms = get_assumptions ctxt;
e0726734@41957
    69
if asms = [@{term "x * v"}, @{term "2 * u"}] then ()
neuper@41975
    70
else error "mstools.sml insert_/get_assumptions changed 1.";
e0726734@41957
    71
neuper@41961
    72
val ctxt = insert_environments
neuper@41961
    73
      [(@{term "y"}, @{term "17"}), (@{term "z"}, @{term "y"})] ctxt;
e0726734@41957
    74
val envs = get_environments ctxt;
e0726734@41957
    75
if envs = [(@{term "y"}, @{term "17"}), (@{term "z"}, @{term "y"})] then ()
neuper@41975
    76
else error "mstools.sml insert_/get_environments changed 2.";
neuper@41975
    77
neuper@42019
    78
"----------- fun transfer_asms_from_to ------------------";
neuper@42019
    79
"----------- fun transfer_asms_from_to ------------------";
neuper@42019
    80
"----------- fun transfer_asms_from_to ------------------";
neuper@42019
    81
val ctxt = ProofContext.init_global @{theory "Isac"}
neuper@42019
    82
val from_ctxt = insert_assumptions
neuper@42019
    83
  [str2term "a < (fro::int)", str2term "b < (fro::int)"] ctxt
neuper@42019
    84
val to_ctxt = insert_assumptions
neuper@42019
    85
  [str2term "b < (to::int)", str2term "c < (to::int)"] ctxt
neuper@42019
    86
val new_ctxt = transfer_asms_from_to from_ctxt to_ctxt;
neuper@42019
    87
if terms2strs (get_assumptions new_ctxt) = ["b < fro", "b < to", "c < to"]
neuper@42019
    88
then () else error "fun transfer_asms_from_to changed"
e0726734@41957
    89
neuper@42023
    90
"----------- fun from_subpbl_to_caller ------------------";
neuper@42023
    91
"----------- fun from_subpbl_to_caller ------------------";
neuper@42023
    92
"----------- fun from_subpbl_to_caller ------------------";
neuper@42023
    93
val ctxt = ProofContext.init_global @{theory "Isac"}
neuper@42023
    94
val sub_ctxt = insert_assumptions
neuper@42023
    95
  [str2term "a < (fro::int)", str2term "b < (fro::int)"] ctxt
neuper@42023
    96
val caller_ctxt = insert_assumptions
neuper@42023
    97
  [str2term "b < (to::int)", str2term "c < (to::int)"] ctxt
neuper@42023
    98
val scrval = str2term "[x_1 = 1, x_2 = 2, x_3 = 3]";
neuper@42023
    99
val new_ctxt = from_subpbl_to_caller sub_ctxt scrval caller_ctxt;
neuper@42023
   100
if terms2strs (get_assumptions new_ctxt) =
neuper@42023
   101
["b < fro", "x_1 = 1", "x_2 = 2", "x_3 = 3", "b < to", "c < to"]
neuper@42023
   102
then () else error "fun from_subpbl_to_caller changed"
neuper@41976
   103
neuper@42019
   104
"----------- all ctxt changes in minimsubpbl x+1=2 ------";
neuper@42019
   105
"----------- all ctxt changes in minimsubpbl x+1=2 ------";
neuper@42019
   106
"----------- all ctxt changes in minimsubpbl x+1=2 ------";
neuper@41977
   107
val fmz = ["equality (x+1=(2::real))", "solveFor x","solutions L"];
neuper@41977
   108
val (dI',pI',mI') =
neuper@41977
   109
  ("Test", ["sqroot-test","univariate","equation","test"],
neuper@41977
   110
   ["Test","squ-equ-test-subpbl1"]);
akargl@42188
   111
akargl@42188
   112
(*========== inhibit exn AK110725 ================================================
akargl@42188
   113
(* ERROR: get_pbt not found: ["sqroot-test","univariate","equation","test"] *)
neuper@41977
   114
val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
akargl@42188
   115
========== inhibit exn AK110725 ================================================*)
neuper@42010
   116
akargl@42188
   117
(*========== inhibit exn AK110725 ================================================
akargl@42188
   118
(* ERROR: pt and  p are not declared due to above error *)
neuper@42020
   119
"=(1)= variables known from formalisation provide type-inference for further input";
neuper@42010
   120
val ctxt = get_ctxt pt p;
akargl@42188
   121
neuper@42020
   122
val SOME known_x = parseNEW ctxt "x+y+z";
neuper@42010
   123
val SOME unknown = parseNEW ctxt "xa+b+c";
akargl@42188
   124
neuper@42010
   125
if type_of known_x = Type ("RealDef.real",[]) then ()
neuper@42020
   126
else error "x+1=2 after start root-pbl wrong type-inference from known x";
neuper@42010
   127
if  type_of unknown = TFree ("'a", ["Groups.plus"]) then ()
neuper@42020
   128
else error "x+1=2 after start root-pbl wrong type-inference for unknowns a,b,c";
neuper@42008
   129
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42008
   130
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42008
   131
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42008
   132
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42008
   133
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42008
   134
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42010
   135
val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Apply_Method ["Test", "squ-equ-test-subpbl1"]*)
neuper@42010
   136
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42008
   137
neuper@42020
   138
"=(2)= preconditions are known at start of interpretation of (root-)method";
neuper@42020
   139
if get_assumptions_ pt p = [str2term "precond_rootmet x"] then ()
neuper@42010
   140
else error "x+1=2 after start root-met no precondition";
neuper@42016
   141
neuper@42010
   142
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42010
   143
val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Subp ["linear", "univariate", "equation", "test"]*)
neuper@42010
   144
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42008
   145
neuper@42020
   146
"=(3)= variables known from arguments of (sub-)method provide type-inference for further input";
neuper@42010
   147
val ctxt = get_ctxt pt p;
neuper@42020
   148
val SOME known_x = parseNEW ctxt "x+y+z";
neuper@42010
   149
val SOME unknown = parseNEW ctxt "a+b+c";
neuper@42010
   150
if type_of known_x = Type ("RealDef.real",[]) then ()
neuper@42020
   151
else error "x+1=2 after start root-pbl wrong type-inference for known x";
neuper@42010
   152
if  type_of unknown = TFree ("'a", ["Groups.plus"]) then ()
neuper@42020
   153
else error "x+1=2 after start root-pbl wrong type-inference for unknowns a,b,c";
neuper@42008
   154
neuper@42010
   155
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42010
   156
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42010
   157
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42010
   158
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42010
   159
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42010
   160
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42010
   161
val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Apply_Method ["Test", "solve_linear"]*)
neuper@42010
   162
val (p,_,f,nxt,_,pt) = me nxt p [] pt; 
neuper@41976
   163
neuper@42020
   164
"=(4)= preconds are known at start of interpretation of (sub-)method";
neuper@42010
   165
if get_assumptions_ pt p =
neuper@42020
   166
  [parse_patt @{theory} "matches (?a = ?b) (-1 + x = 0)"] then ()
neuper@42010
   167
else error "x+1=2 after start sub-met no precondition";
neuper@42010
   168
neuper@42010
   169
val (p,_,f,nxt,_,pt) = me nxt p [] pt; 
neuper@42010
   170
neuper@42010
   171
"prep =(5)=: inject assumptions into sub-met: sub_asm_out, sub_asm_local";
neuper@42010
   172
val (SOME (iform, cform), SOME (ires, cres)) = get_obj g_loc pt (fst p);
neuper@42010
   173
val ctxt = insert_assumptions [str2term "x < sub_asm_out", str2term "a < sub_asm_local"] cres;
neuper@42010
   174
val pt = update_loc' pt (fst p) (SOME (iform, cform), SOME (ires, ctxt));
neuper@42010
   175
neuper@42010
   176
val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Check_Postcond ["linear","univariate", ...]) *);
neuper@42010
   177
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42010
   178
neuper@42020
   179
"=(5)= transfer non-local assumptions and result from sub-method to root-method." ^
neuper@42020
   180
"      non-local assumptions are those contaning a variable known in root-method";
neuper@42023
   181
if terms2strs (get_assumptions_ pt p) =
neuper@42023
   182
  ["matches (?a = ?b) (-1 + x = 0)", "x < sub_asm_out", "x = 1", "precond_rootmet x"]
neuper@42023
   183
  then () else error "x+1=2 transfer from sub-met to root-met changed";
neuper@42010
   184
neuper@42010
   185
val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt=Check_P["sqroot-test","univariate","equation","test"*)
neuper@42010
   186
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42010
   187
neuper@42020
   188
"=(6)= assumptions collected during lucas-interpretation for proof of postcondition";
neuper@42023
   189
if terms2strs (get_assumptions_ pt p) = (*weak check: sub-result = root-result = [x = 1]*)
neuper@42023
   190
  ["matches (?a = ?b) (-1 + x = 0)", "x < sub_asm_out", "x = 1", "precond_rootmet x"]
neuper@42023
   191
  then () else error "x+1=2 transfer from sub-met to root-met changed";
akargl@42188
   192
========== inhibit exn AK110725 ================================================*)
neuper@42016
   193
neuper@42016
   194
neuper@41982
   195
"----------- go through Model_Problem until nxt_tac -----";
neuper@41982
   196
"----------- go through Model_Problem until nxt_tac -----";
neuper@41982
   197
"----------- go through Model_Problem until nxt_tac -----";
neuper@41982
   198
(*FIXME.WN110511 delete this test? (goes through "Model_Problem until nxt_tac)*)
neuper@41982
   199
val fmz = ["equality (x+1=(2::real))", "solveFor x","solutions L"];
neuper@41982
   200
val (dI',pI',mI') =
neuper@41982
   201
  ("Test", ["sqroot-test","univariate","equation","test"],
neuper@41982
   202
   ["Test","squ-equ-test-subpbl1"]);
akargl@42188
   203
(*========== inhibit exn AK110725 ================================================
akargl@42188
   204
(* ERROR: same as above, see lines 120- 123 *)
neuper@41982
   205
val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
akargl@42188
   206
========== inhibit exn AK110725 ================================================*)
akargl@42188
   207
akargl@42188
   208
(*========== inhibit exn AK110725 ================================================
akargl@42188
   209
(* ERROR: p, nxt, pt not declared due to above error *)
neuper@41982
   210
val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
neuper@41982
   211
val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
neuper@41982
   212
val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
neuper@41982
   213
val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
neuper@41982
   214
val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
neuper@41982
   215
val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
neuper@41982
   216
val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
neuper@41982
   217
val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
neuper@41982
   218
val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
neuper@41982
   219
val (p,_,f,nxt,_,pt) = me nxt p [1] pt; (*nxt = ("Subproblem",*)
neuper@41982
   220
val (p,_,f,nxt,_,pt) = me nxt p [1] pt; (*nxt = ("Model_Problem",*)
neuper@41982
   221
"~~~~~ fun me, args:"; val (_,tac) = nxt;
neuper@41982
   222
val (pt, p) = case locatetac tac (pt,p) of
neuper@41982
   223
	("ok", (_, _, ptp))  => ptp | _ => error "script.sml locatetac";
neuper@41982
   224
"~~~~~ fun step, args:"; val (ip as (_,p_), (ptp as (pt,p), tacis)) = (p, ((pt, e_pos'), []))
neuper@41982
   225
val pIopt = get_pblID (pt,ip);
neuper@41982
   226
tacis; (*= []*)
neuper@41982
   227
pIopt; (*= SOME ["sqroot-test", "univariate", ...]*)
neuper@41982
   228
member op = [Pbl,Met] p_ andalso is_none (get_obj g_env pt (fst p)); (*= true*)
neuper@41982
   229
"~~~~~ fun nxt_specify_, args:"; val (ptp as (pt, pos as (p,p_))) = (pt, ip);
neuper@41982
   230
val pblobj as (PblObj{meth,origin=origin as (oris,(dI',pI',mI'),_),
neuper@41982
   231
			  probl,spec=(dI,pI,mI),...}) = get_obj I pt p;
neuper@41982
   232
just_created_ pblobj (*by Subproblem*) andalso origin <> e_origin; (*false=oldNB*)
neuper@41982
   233
val cpI = if pI = e_pblID then pI' else pI;
neuper@41982
   234
		val cmI = if mI = e_metID then mI' else mI;
neuper@41982
   235
		val {ppc, prls, where_, ...} = get_pbt cpI;
neuper@41982
   236
		val pre = check_preconds "thy 100820" prls where_ probl;
neuper@41982
   237
		val pb = foldl and_ (true, map fst pre);
neuper@41982
   238
val (_,tac) = nxt_spec p_ pb oris (dI',pI',mI') (probl, meth) 
neuper@41982
   239
			    (ppc, (#ppc o get_met) cmI) (dI, pI, mI); (*tac = Add_Given "equality (-1 + x = 0)"*)
neuper@41982
   240
"~~~~~ fun nxt_specif, args:"; val (Add_Given ct, ptp) = (tac, ptp);
neuper@41982
   241
"~~~~~ fun nxt_specif_additem, args:"; val (sel, ct, ptp as (pt, (p, Pbl))) = ("#Given", ct, ptp);
neuper@41982
   242
val (PblObj{meth=met,origin=(oris,(dI',pI',_),_),
neuper@41982
   243
		  probl=pbl,spec=(dI,pI,_),...}) = get_obj I pt p;
neuper@41982
   244
val thy = if dI = e_domID then assoc_thy dI' else assoc_thy dI;
neuper@41982
   245
val cpI = if pI = e_pblID then pI' else pI;
neuper@41982
   246
val ctxt = get_ctxt pt (p, Pbl);
neuper@41982
   247
"~~~~~ fun appl_add, args:"; val (ctxt, sel, oris, ppc, pbt, str) = (ctxt, sel, oris, pbl, ((#ppc o get_pbt) cpI), ct);
neuper@41982
   248
val SOME t = parseNEW ctxt str;
neuper@41982
   249
is_known ctxt sel oris t;
neuper@41982
   250
"~~~~~ fun is_known, args:"; val (ctxt, sel, ori, t) = (ctxt, sel, oris, t);
neuper@41982
   251
val _ = tracing ("RM is_known: t=" ^ term2str t);
neuper@41982
   252
val ots = (distinct o flat o (map #5)) (ori:ori list);
neuper@41982
   253
val oids = ((map (fst o dest_Free)) o distinct o flat o (map vars)) ots;
neuper@41982
   254
val (d, ts) = split_dts t;
neuper@41982
   255
"~~~~~ fun split_dts, args:"; val (t as d $ arg) = t;
neuper@41982
   256
(*if is_dsc d then () else error "TODO";*)
neuper@41990
   257
if is_dsc d then () else error "TODO";
neuper@41982
   258
"----- these were the errors (call hierarchy from bottom up)";
neuper@41982
   259
appl_add ctxt sel oris pbl ((#ppc o get_pbt) cpI) ct;(*WAS
neuper@41982
   260
Err "[error] appl_add: is_known: identifiers [equality] not in example"*)
neuper@41982
   261
nxt_specif_additem "#Given" ct ptp;(*WAS
neuper@41982
   262
Tac "[error] appl_add: is_known: identifiers [equality] not in example"*)
neuper@41982
   263
nxt_specif tac ptp;(*WAS
neuper@41982
   264
Tac "[error] appl_add: is_known: identifiers [equality] not in example"*)
neuper@41982
   265
nxt_specify_ (pt,ip); (*WAS
neuper@41982
   266
Tac "[error] appl_add: is_known: identifiers [equality] not in example"*)
neuper@41982
   267
(*val (p,_,f,nxt,_,pt) = me nxt p [1] pt; WAS
neuper@41982
   268
Tac "[error] appl_add: is_known: identifiers [equality] not in example"*)
akargl@42188
   269
========== inhibit exn AK110725 ================================================*)