test/Tools/isac/ADDTESTS/All_Ctxt.thy
author Walther Neuper <neuper@ist.tugraz.at>
Mon, 18 Jul 2011 16:37:30 +0200
branchdecompose-isar
changeset 42103 e921660e2d7c
parent 42092 1a6d6089e594
child 48881 264bb401b7b9
permissions -rw-r--r--
intermed: make autocalc..CompleteCalc run with x+1=2

error was in fun all_modspec: used string of formalization
for constraining types in ctxt instead of pors.
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