test/Tools/isac/ADDTESTS/All_Ctxt.thy
author Walther Neuper <wneuper@ist.tugraz.at>
Wed, 07 Feb 2018 13:06:27 +0100
changeset 59356 100d34e45307
parent 59353 a5784cfe30a9
child 59395 862eb17f9e16
permissions -rw-r--r--
Isabelle2015->17: test setup for ADDTESTS/All_Ctxt, fst error in "ProgLang/termC.sml"
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;
neuper@42023
    26
  val SOME known_x = parseNEW ctxt "x + y + z";
neuper@42023
    27
  val SOME unknown = 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@59276
    48
  if 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;
neuper@42023
    65
  val SOME known_x = parseNEW ctxt "x+y+z";
neuper@42023
    66
  val SOME unknown = 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@59276
    88
  if terms2strs (Ctree.get_assumptions_ pt p) = ["matches (?a = ?b) (-1 + x = 0)"]
neuper@42103
    89
  then () else error "All_Ctx: asms after start interpretation of SubProblem";
neuper@42023
    90
*}
neuper@42023
    91
neuper@42023
    92
ML {*
wneuper@59261
    93
 val (p,_,f,nxt,_,pt) = Math_Engine.me nxt p [] pt; 
neuper@42023
    94
*}
neuper@42023
    95
neuper@42023
    96
ML {*
neuper@42023
    97
  "artifically inject assumptions";
wneuper@59276
    98
  val (SOME (iform, cform), SOME (ires, cres)) = Ctree.get_obj Ctree.g_loc pt (fst p);
wneuper@59308
    99
  val ctxt = Stool.insert_assumptions [str2term "x < sub_asm_out",
neuper@42023
   100
                                 str2term "a < sub_asm_local"] cres;
wneuper@59275
   101
  val pt = Ctree.update_loc' pt (fst p) (SOME (iform, cform), SOME (ires, ctxt));
neuper@42023
   102
*}
neuper@42023
   103
neuper@42033
   104
ML {* 
wneuper@59261
   105
val (p,_,f,nxt,_,pt) = Math_Engine.me nxt p [] pt;
wneuper@59261
   106
val (p,_,f,nxt,_,pt) = Math_Engine.me nxt p [] pt;
neuper@42023
   107
*}
neuper@42023
   108
neuper@42023
   109
section {* finish subproblem, return to calling method*}
neuper@42023
   110
neuper@42023
   111
text {* transfer non-local assumptions and result from sub-method to root-method.
neuper@42023
   112
  non-local assumptions are those contaning a variable known in root-method.
neuper@42023
   113
*}
neuper@42023
   114
neuper@42023
   115
ML {*
wneuper@59275
   116
  if terms2strs (Ctree.get_assumptions_ pt p) = 
neuper@42103
   117
    ["matches (?a = ?b) (-1 + x = 0)", "x < sub_asm_out", "x = 1", "precond_rootmet x"]
neuper@42103
   118
  then () else error "All_Ctx: asms after finishing SubProblem";
neuper@42023
   119
*}
neuper@42023
   120
neuper@42023
   121
ML {*
wneuper@59261
   122
  val (p,_,f,nxt,_,pt) = Math_Engine.me nxt p [] pt;
wneuper@59261
   123
  val (p,_,f,nxt,_,pt) = Math_Engine.me nxt p [] pt;
neuper@42023
   124
*}
neuper@42023
   125
neuper@42023
   126
section {* finish Lucas interpretation *}
neuper@42023
   127
neuper@42023
   128
text {* assumptions collected during lucas-interpretation for proof of postcondition *}
neuper@42023
   129
neuper@42023
   130
ML {*
wneuper@59276
   131
  if terms2strs (Ctree.get_assumptions_ pt p) = 
neuper@42103
   132
    ["matches (?a = ?b) (-1 + x = 0)", "x < sub_asm_out", "x = 1", "precond_rootmet x"]
neuper@42103
   133
  then () else error "All_Ctx at final result";
neuper@42023
   134
*}
neuper@42023
   135
e0726734@42032
   136
ML {*
wneuper@59265
   137
  Chead.show_pt pt;
e0726734@42032
   138
*}
e0726734@42032
   139
neuper@42023
   140
end