test/Tools/isac/ADDTESTS/All_Ctxt.thy
author Walther Neuper <wneuper@ist.tugraz.at>
Mon, 26 Mar 2018 09:20:09 +0200
changeset 59417 3a7d1c9e91f3
parent 59411 3e241a6938ce
child 59465 b33dc41f4350
permissions -rw-r--r--
Rule: Test_Isac works completely
wneuper@59356
     1
(* this theory is evaluated BEFORE Test_Isac.thy opens structures.
wneuper@59356
     2
  So, if you encounter errors here, first fix them in ~~/test/Tools/isac/Minimsubpbl/* *)
e0726734@42026
     3
wneuper@59356
     4
theory All_Ctxt imports "~~/src/Tools/isac/Knowledge/Isac"
neuper@48884
     5
begin
neuper@42023
     6
neuper@42023
     7
text {* all changes of context are demonstrated in a mini example.
neuper@42023
     8
  see test/../mstools.sml --- all ctxt changes in minimsubpbl x+1=2 --- *}
neuper@42023
     9
neuper@42023
    10
section {* start of the mini example *}
neuper@42023
    11
neuper@42023
    12
ML {*
neuper@42033
    13
  val fmz = ["equality (x+1=(2::real))", "solveFor x", "solutions L"];
neuper@42023
    14
  val (dI',pI',mI') =
neuper@42023
    15
    ("Test", ["sqroot-test","univariate","equation","test"],
neuper@42023
    16
     ["Test","squ-equ-test-subpbl1"]);
wneuper@59261
    17
  val (p,_,f,nxt,_,pt) = Math_Engine.CalcTreeTEST [(fmz, (dI',pI',mI'))];
neuper@42023
    18
*}
neuper@42023
    19
neuper@42023
    20
section {* start of specify phase *}
neuper@42023
    21
text {* variables known from formalisation provide type-inference 
neuper@42023
    22
  for further input *}
neuper@42023
    23
neuper@42023
    24
ML {*
wneuper@59276
    25
  val ctxt = Ctree.get_ctxt pt p;
wneuper@59395
    26
  val SOME known_x = TermC.parseNEW ctxt "x + y + z";
wneuper@59395
    27
  val SOME unknown = TermC.parseNEW ctxt "a + b + c";
neuper@42103
    28
  if type_of known_x = HOLogic.realT andalso 
neuper@42103
    29
     type_of unknown = TFree ("'a",["Groups.plus"])
neuper@42103
    30
  then () else error "All_Ctx: type constraints beginning specification of root-problem ";
neuper@42023
    31
*}
neuper@42023
    32
neuper@42023
    33
ML {*
wneuper@59261
    34
  val (p,_,f,nxt,_,pt) = Math_Engine.me nxt p [] pt;
wneuper@59261
    35
  val (p,_,f,nxt,_,pt) = Math_Engine.me nxt p [] pt;
wneuper@59261
    36
  val (p,_,f,nxt,_,pt) = Math_Engine.me nxt p [] pt;
wneuper@59261
    37
  val (p,_,f,nxt,_,pt) = Math_Engine.me nxt p [] pt;
wneuper@59261
    38
  val (p,_,f,nxt,_,pt) = Math_Engine.me nxt p [] pt;
wneuper@59261
    39
  val (p,_,f,nxt,_,pt) = Math_Engine.me nxt p [] pt;
wneuper@59261
    40
  val (p,_,f,nxt,_,pt) = Math_Engine.me nxt p [] pt;
wneuper@59261
    41
  val (p,_,f,nxt,_,pt) = Math_Engine.me nxt p [] pt;
neuper@42023
    42
*}
neuper@42023
    43
neuper@42023
    44
section {* start interpretation of method *}
neuper@42023
    45
text {* preconditions are known at start of interpretation of (root-)method *}
neuper@42023
    46
neuper@42023
    47
ML {*
wneuper@59417
    48
  if Rule.terms2strs (Ctree.get_assumptions_ pt p) = ["precond_rootmet x"]
neuper@42103
    49
  then () else error "All_Ctx: asms after start interpretation of root-method";
neuper@42023
    50
*}
neuper@42023
    51
neuper@42023
    52
ML {*
wneuper@59261
    53
  val (p,_,f,nxt,_,pt) = Math_Engine.me nxt p [] pt;
wneuper@59261
    54
  val (p,_,f,nxt,_,pt) = Math_Engine.me nxt p [] pt;
wneuper@59261
    55
  val (p,_,f,nxt,_,pt) = Math_Engine.me nxt p [] pt;
neuper@42023
    56
*}
neuper@42023
    57
neuper@42023
    58
section {* start a subproblem: specification *}
neuper@42092
    59
text {* 
neuper@42092
    60
  ctxt is initialised from the thy in "SubProblem (thy, pbl, met) args"
neuper@42092
    61
  and extended with the types of the variables in args. *}
neuper@42023
    62
neuper@42092
    63
ML {* (*not significant in this example*)
wneuper@59276
    64
  val ctxt = Ctree.get_ctxt pt p;
wneuper@59395
    65
  val SOME known_x = TermC.parseNEW ctxt "x+y+z";
wneuper@59395
    66
  val SOME unknown = TermC.parseNEW ctxt "a+b+c";
neuper@42103
    67
  if type_of known_x = HOLogic.realT andalso 
neuper@42103
    68
     type_of unknown = TFree ("'a",["Groups.plus"])
neuper@42103
    69
  then () else error "All_Ctx: type constraints beginning specification of SubProblem ";
neuper@42023
    70
*}
neuper@42023
    71
neuper@42023
    72
ML {*
wneuper@59261
    73
  val (p,_,f,nxt,_,pt) = Math_Engine.me nxt p [] pt;
wneuper@59261
    74
  val (p,_,f,nxt,_,pt) = Math_Engine.me nxt p [] pt;
wneuper@59261
    75
  val (p,_,f,nxt,_,pt) = Math_Engine.me nxt p [] pt;
wneuper@59261
    76
  val (p,_,f,nxt,_,pt) = Math_Engine.me nxt p [] pt;
wneuper@59261
    77
  val (p,_,f,nxt,_,pt) = Math_Engine.me nxt p [] pt;
wneuper@59261
    78
  val (p,_,f,nxt,_,pt) = Math_Engine.me nxt p [] pt;
wneuper@59261
    79
  val (p,_,f,nxt,_,pt) = Math_Engine.me nxt p [] pt;
wneuper@59261
    80
  val (p,_,f,nxt,_,pt) = Math_Engine.me nxt p [] pt; 
neuper@42023
    81
*}
neuper@42023
    82
neuper@42023
    83
section {* interpretation of subproblem's method *}
neuper@42023
    84
neuper@42023
    85
text {* preconds are known at start of interpretation of (sub-)method *}
neuper@42023
    86
neuper@42023
    87
ML {*
wneuper@59410
    88
*} ML {*
wneuper@59410
    89
p = ([1], Res)
wneuper@59410
    90
*} ML {*
wneuper@59417
    91
Rule.terms2strs (Ctree.get_assumptions_ pt p) = ["precond_rootmet x"]
wneuper@59410
    92
*} ML {*
wneuper@59410
    93
*}
wneuper@59410
    94
wneuper@59410
    95
ML {*
wneuper@59417
    96
  if Rule.terms2strs (Ctree.get_assumptions_ pt p) = ["matches (?a = ?b) (-1 + x = 0)"]
neuper@42103
    97
  then () else error "All_Ctx: asms after start interpretation of SubProblem";
neuper@42023
    98
*}
neuper@42023
    99
neuper@42023
   100
ML {*
wneuper@59261
   101
 val (p,_,f,nxt,_,pt) = Math_Engine.me nxt p [] pt; 
neuper@42023
   102
*}
neuper@42023
   103
neuper@42023
   104
ML {*
neuper@42023
   105
  "artifically inject assumptions";
wneuper@59276
   106
  val (SOME (iform, cform), SOME (ires, cres)) = Ctree.get_obj Ctree.g_loc pt (fst p);
wneuper@59395
   107
  val ctxt = Stool.insert_assumptions [TermC.str2term "x < sub_asm_out",
wneuper@59395
   108
                                 TermC.str2term "a < sub_asm_local"] cres;
wneuper@59275
   109
  val pt = Ctree.update_loc' pt (fst p) (SOME (iform, cform), SOME (ires, ctxt));
neuper@42023
   110
*}
neuper@42023
   111
neuper@42033
   112
ML {* 
wneuper@59261
   113
val (p,_,f,nxt,_,pt) = Math_Engine.me nxt p [] pt;
wneuper@59261
   114
val (p,_,f,nxt,_,pt) = Math_Engine.me nxt p [] pt;
neuper@42023
   115
*}
neuper@42023
   116
neuper@42023
   117
section {* finish subproblem, return to calling method*}
neuper@42023
   118
neuper@42023
   119
text {* transfer non-local assumptions and result from sub-method to root-method.
neuper@42023
   120
  non-local assumptions are those contaning a variable known in root-method.
neuper@42023
   121
*}
neuper@42023
   122
neuper@42023
   123
ML {*
wneuper@59411
   124
*} ML {*
wneuper@59417
   125
Rule.terms2strs (Ctree.get_assumptions_ pt p)
wneuper@59411
   126
*}
wneuper@59411
   127
wneuper@59411
   128
ML {*
wneuper@59417
   129
  if Rule.terms2strs (Ctree.get_assumptions_ pt p) = 
neuper@42103
   130
    ["matches (?a = ?b) (-1 + x = 0)", "x < sub_asm_out", "x = 1", "precond_rootmet x"]
neuper@42103
   131
  then () else error "All_Ctx: asms after finishing SubProblem";
neuper@42023
   132
*}
neuper@42023
   133
neuper@42023
   134
ML {*
wneuper@59261
   135
  val (p,_,f,nxt,_,pt) = Math_Engine.me nxt p [] pt;
wneuper@59261
   136
  val (p,_,f,nxt,_,pt) = Math_Engine.me nxt p [] pt;
neuper@42023
   137
*}
neuper@42023
   138
neuper@42023
   139
section {* finish Lucas interpretation *}
neuper@42023
   140
neuper@42023
   141
text {* assumptions collected during lucas-interpretation for proof of postcondition *}
neuper@42023
   142
neuper@42023
   143
ML {*
wneuper@59411
   144
*} ML {*
wneuper@59417
   145
Rule.terms2strs (Ctree.get_assumptions_ pt p)
wneuper@59411
   146
*}
wneuper@59411
   147
wneuper@59411
   148
ML {*
wneuper@59417
   149
  if Rule.terms2strs (Ctree.get_assumptions_ pt p) = 
neuper@42103
   150
    ["matches (?a = ?b) (-1 + x = 0)", "x < sub_asm_out", "x = 1", "precond_rootmet x"]
neuper@42103
   151
  then () else error "All_Ctx at final result";
neuper@42023
   152
*}
neuper@42023
   153
e0726734@42032
   154
ML {*
wneuper@59265
   155
  Chead.show_pt pt;
e0726734@42032
   156
*}
e0726734@42032
   157
wneuper@59410
   158
ML {*
wneuper@59410
   159
*} ML {*
wneuper@59410
   160
*}
wneuper@59410
   161
neuper@42023
   162
end