doc-src/isac/jrocnik/Inverse_Z_Transform/Inverse_Z_Transform.thy
author Jan Rocnik <jan.rocnik@student.tugraz.at>
Thu, 08 Sep 2011 23:17:35 +0200
branchdecompose-isar
changeset 42252 e633bb41ea42
permissions -rwxr-xr-x
setted up envoirement for latex includement (tuned)
jan@42252
     1
(* Title:  Test_Z_Transform
jan@42252
     2
   Author: Jan Rocnik
jan@42252
     3
   (c) copyright due to lincense terms.
jan@42252
     4
12345678901234567890123456789012345678901234567890123456789012345678901234567890
jan@42252
     5
        10        20        30        40        50        60        70        80
jan@42252
     6
*)
jan@42252
     7
jan@42252
     8
theory Inverse_Z_Transform imports Isac begin
jan@42252
     9
jan@42252
    10
section {*trials towards Z transform *}
jan@42252
    11
text{*===============================*}
jan@42252
    12
subsection {*terms*}
jan@42252
    13
ML {*
jan@42252
    14
@{term "1 < || z ||"};
jan@42252
    15
@{term "z / (z - 1)"};
jan@42252
    16
@{term "-u -n - 1"};
jan@42252
    17
@{term "-u [-n - 1]"}; (*[ ] denotes lists !!!*)
jan@42252
    18
@{term "z /(z - 1) = -u [-n - 1]"};Isac
jan@42252
    19
@{term "1 < || z || ==> z / (z - 1) = -u [-n - 1]"};
jan@42252
    20
term2str @{term "1 < || z || ==> z / (z - 1) = -u [-n - 1]"};
jan@42252
    21
*}
jan@42252
    22
ML {*
jan@42252
    23
(*alpha -->  "</alpha>" *)
jan@42252
    24
jan@42252
    25
@{term "\<alpha> "};
jan@42252
    26
@{term "\<delta> "};
jan@42252
    27
@{term "\<phi> "};
jan@42252
    28
@{term "\<rho> "};
jan@42252
    29
term2str @{term "\<rho> "};
jan@42252
    30
*}
jan@42252
    31
jan@42252
    32
subsection {*rules*}
jan@42252
    33
(*axiomatization "z / (z - 1) = -u [-n - 1]" Illegal variable name: "z / (z - 1) = -u [-n - 1]" *)
jan@42252
    34
(*definition     "z / (z - 1) = -u [-n - 1]" Bad head of lhs: existing constant "op /"*)
jan@42252
    35
axiomatization where 
jan@42252
    36
  rule1: "1 = \<delta>[n]" and
jan@42252
    37
  rule2: "|| z || > 1 ==> z / (z - 1) = u [n]" and
jan@42252
    38
  rule3: "|| z || < 1 ==> z / (z - 1) = -u [-n - 1]" and 
jan@42252
    39
  rule4: "|| z || > || \<alpha> || ==> z / (z - \<alpha>) = \<alpha>^n * u [n]" and
jan@42252
    40
  rule5: "|| z || < || \<alpha> || ==> z / (z - \<alpha>) = -(\<alpha>^n) * u [-n - 1]" and
jan@42252
    41
  rule6: "|| z || > 1 ==> z/(z - 1)^2 = n * u [n]"
jan@42252
    42
ML {*
jan@42252
    43
@{thm rule1};
jan@42252
    44
@{thm rule2};
jan@42252
    45
@{thm rule3};
jan@42252
    46
@{thm rule4};
jan@42252
    47
*}
jan@42252
    48
jan@42252
    49
subsection {*apply rules*}
jan@42252
    50
ML {*
jan@42252
    51
val inverse_Z = append_rls "inverse_Z" e_rls
jan@42252
    52
  [ Thm  ("rule3",num_str @{thm rule3}),
jan@42252
    53
    Thm  ("rule4",num_str @{thm rule4}),
jan@42252
    54
    Thm  ("rule1",num_str @{thm rule1})   
jan@42252
    55
  ];
jan@42252
    56
jan@42252
    57
val t = str2term "z / (z - 1) + z / (z - \<alpha>) + 1";
jan@42252
    58
val SOME (t', asm) = rewrite_set_ thy true inverse_Z t;
jan@42252
    59
term2str t' = "z / (z - ?\<delta> [?n]) + z / (z - \<alpha>) + ?\<delta> [?n]"; (*attention rule1 !!!*)
jan@42252
    60
*}
jan@42252
    61
ML {*
jan@42252
    62
val (thy, ro, er) = (@{theory}, tless_true, eval_rls);
jan@42252
    63
*}
jan@42252
    64
ML {*
jan@42252
    65
val SOME (t, asm1) = rewrite_ thy ro er true (num_str @{thm rule3}) t;
jan@42252
    66
term2str t = "- ?u [- ?n - 1] + z / (z - \<alpha>) + 1"; (*- real *)
jan@42252
    67
term2str t;
jan@42252
    68
*}
jan@42252
    69
ML {*
jan@42252
    70
val SOME (t, asm2) = rewrite_ thy ro er true (num_str @{thm rule4}) t;
jan@42252
    71
term2str t = "- ?u [- ?n - 1] + \<alpha> ^ ?n * ?u [?n] + 1"; (*- real *)
jan@42252
    72
term2str t;
jan@42252
    73
*}
jan@42252
    74
ML {*
jan@42252
    75
val SOME (t, asm3) = rewrite_ thy ro er true (num_str @{thm rule1}) t;
jan@42252
    76
term2str t = "- ?u [- ?n - 1] + \<alpha> ^ ?n * ?u [?n] + ?\<delta> [?n]"; (*- real *)
jan@42252
    77
term2str t;
jan@42252
    78
*}
jan@42252
    79
ML {*
jan@42252
    80
terms2str (asm1 @ asm2 @ asm3);
jan@42252
    81
*}
jan@42252
    82
jan@42252
    83
section {*Prepare steps in CTP-based programming language*}
jan@42252
    84
text{*===================================================*}
jan@42252
    85
subsection {*prepare expression*}
jan@42252
    86
ML {*
jan@42252
    87
val ctxt = ProofContext.init_global @{theory};
jan@42252
    88
val ctxt = declare_constraints' [@{term "z::real"}] ctxt;
jan@42252
    89
jan@42252
    90
val SOME fun1 = parseNEW ctxt "X z = 3 / (z - 1/4 + -1/8 * z ^ -1)"; term2str fun1;
jan@42252
    91
val SOME fun1' = parseNEW ctxt "X z = 3 / (z - 1/4 + -1/8 * (1/z))"; term2str fun1';
jan@42252
    92
*}
jan@42252
    93
jan@42252
    94
axiomatization where
jan@42252
    95
  ruleZY: "(X z = a / b) = (X' z = a / (z * b))"
jan@42252
    96
jan@42252
    97
ML {*
jan@42252
    98
val (thy, ro, er) = (@{theory}, tless_true, eval_rls);
jan@42252
    99
val SOME (fun2, asm1) = rewrite_ thy ro er true  @{thm ruleZY} fun1; term2str fun2;
jan@42252
   100
val SOME (fun2', asm1) = rewrite_ thy ro er true  @{thm ruleZY} fun1'; term2str fun2';
jan@42252
   101
jan@42252
   102
val SOME (fun3,_) = rewrite_set_ @{theory Isac} false norm_Rational fun2;
jan@42252
   103
term2str fun3; (*fails on x^(-1) TODO*)
jan@42252
   104
val SOME (fun3',_) = rewrite_set_ @{theory Isac} false norm_Rational fun2';
jan@42252
   105
term2str fun3'; (*OK*)
jan@42252
   106
jan@42252
   107
val (_, expr) = HOLogic.dest_eq fun3'; term2str expr;
jan@42252
   108
*}
jan@42252
   109
jan@42252
   110
subsection {*solve equation*}
jan@42252
   111
ML {*(*from test/Tools/isac/Minisubpbl/100-init-rootpbl.sml*)
jan@42252
   112
"----------- Minisubplb/100-init-rootp (*OK*)bl.sml ---------------------";
jan@42252
   113
val denominator = parseNEW ctxt "z^2 - 1/4*z - 1/8 = 0";
jan@42252
   114
val fmz = ["equality (z^2 - 1/4*z - 1/8 = (0::real))", "solveFor z","solutions L"];
jan@42252
   115
val (dI',pI',mI') =("Isac", ["univariate","equation"], ["no_met"]);
jan@42252
   116
(*                           ^^^^^^^^^^^^^^^^^^^^^^ TODO: ISAC determines type of eq*)
jan@42252
   117
*}
jan@42252
   118
ML {*
jan@42252
   119
val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
jan@42252
   120
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
jan@42252
   121
(*[
jan@42252
   122
(([], Frm), solve (z ^ 2 - 1 / 4 * z - 1 / 8 = 0, z)),
jan@42252
   123
(([1], Frm), z ^ 2 - 1 / 4 * z - 1 / 8 = 0),              bad rewrite order
jan@42252
   124
(([1], Res), -1 / 8 + z ^ 2 + -1 / 4 * z = 0),            bad pattern
jan@42252
   125
(([2], Pbl), solve (-1 / 8 + z ^ 2 + -1 / 4 * z = 0, z)),
jan@42252
   126
(([2,1], Pbl), solve (-1 / 8 + z ^ 2 + -1 / 4 * z = 0, z)),
jan@42252
   127
(([2,1,1], Pbl), solve (-1 / 8 + z ^ 2 + -1 / 4 * z = 0, z)),
jan@42252
   128
(([2,1,1,1], Frm), -1 / 8 + z ^ 2 + -1 / 4 * z = 0)] 
jan@42252
   129
*)
jan@42252
   130
*}
jan@42252
   131
ML {*
jan@42252
   132
val denominator = parseNEW ctxt "-1/8 + -1/4*z + z^2 = 0";
jan@42252
   133
(*ergebnis: [gleichung, was tun?, lösung]*)
jan@42252
   134
val fmz = ["equality (-1/8 + -1/4*z + z^2 = (0::real))", "solveFor z","solutions L"];
jan@42252
   135
(*liste der theoreme die zum lösen benötigt werden, aus isac, keine spezielle methode (no met)*)
jan@42252
   136
val (dI',pI',mI') =
jan@42252
   137
  ("Isac", ["pqFormula","degree_2","polynomial","univariate","equation"], ["no_met"]);
jan@42252
   138
(*schritte abarbeiten*)
jan@42252
   139
val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
jan@42252
   140
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
jan@42252
   141
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
jan@42252
   142
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
jan@42252
   143
val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*val nxt = ("Empty_Tac", ...): tac'_*)
jan@42252
   144
show_pt pt;
jan@42252
   145
*}
jan@42252
   146
jan@42252
   147
subsection {*partial fraction decomposition*}
jan@42252
   148
subsubsection {*solution of the equation*}
jan@42252
   149
ML {*
jan@42252
   150
val SOME solutions = parseNEW ctxt "[z=1/2, z=-1/4]";
jan@42252
   151
term2str solutions;
jan@42252
   152
atomty solutions;
jan@42252
   153
*}
jan@42252
   154
jan@42252
   155
subsubsection {*get solutions out of list*}
jan@42252
   156
text {*in isac's CTP-based programming language: $let s_1 = NTH 1 solutions; s_2 = NTH 2...$*}
jan@42252
   157
ML {*
jan@42252
   158
val Const ("List.list.Cons", _) $ s_1 $ (Const ("List.list.Cons", _) $
jan@42252
   159
      s_2 $ Const ("List.list.Nil", _)) = solutions;
jan@42252
   160
term2str s_1;
jan@42252
   161
term2str s_2;
jan@42252
   162
*}
jan@42252
   163
jan@42252
   164
ML {* (*Solutions as Denominator --> Denominator1 = z - Zeropoint1, Denominator2 = z-Zeropoint2,...*)
jan@42252
   165
val xx = HOLogic.dest_eq s_1;
jan@42252
   166
val s_1' = HOLogic.mk_binop "Groups.minus_class.minus" xx;
jan@42252
   167
val xx = HOLogic.dest_eq s_2;
jan@42252
   168
val s_2' = HOLogic.mk_binop "Groups.minus_class.minus" xx;
jan@42252
   169
term2str s_1';
jan@42252
   170
term2str s_2';
jan@42252
   171
*}
jan@42252
   172
jan@42252
   173
subsubsection {*build expression*}
jan@42252
   174
text {*in isac's CTP-based programming language: $let s_1 = Take numerator / (s_1 * s_2)$*}
jan@42252
   175
ML {*
jan@42252
   176
(*The Main Denominator is the multiplikation of the partial fraction denominators*)
jan@42252
   177
val denominator' = HOLogic.mk_binop "Groups.times_class.times" (s_1', s_2') ;
jan@42252
   178
val SOME numerator = parseNEW ctxt "3::real";
jan@42252
   179
jan@42252
   180
val expr' = HOLogic.mk_binop "Rings.inverse_class.divide" (numerator, denominator');
jan@42252
   181
term2str expr';
jan@42252
   182
*}
jan@42252
   183
jan@42252
   184
subsubsection {*Ansatz - create partial fractions out of our expression*}
jan@42252
   185
jan@42252
   186
axiomatization where
jan@42252
   187
  ansatz2: "n / (a*b) = A/a + B/(b::real)" and
jan@42252
   188
  multiply_eq2: "(n / (a*b) = A/a + B/b) = (a*b*(n  / (a*b)) = a*b*(A/a + B/b))"
jan@42252
   189
jan@42252
   190
ML {*
jan@42252
   191
(*we use our ansatz2 to rewrite our expression and get an equilation with our expression on the left and the partial fractions of it on the right side*)
jan@42252
   192
val SOME (t1,_) = rewrite_ @{theory Isac} e_rew_ord e_rls false @{thm ansatz2} expr';
jan@42252
   193
term2str t1;
jan@42252
   194
atomty t1;
jan@42252
   195
val eq1 = HOLogic.mk_eq (expr', t1);
jan@42252
   196
term2str eq1;
jan@42252
   197
*}
jan@42252
   198
ML {*
jan@42252
   199
(*eliminate the demoninators by multiplying the left and the right side with the main denominator*)
jan@42252
   200
val SOME (eq2,_) = rewrite_ @{theory Isac} e_rew_ord e_rls false @{thm multiply_eq2} eq1;
jan@42252
   201
term2str eq2;
jan@42252
   202
*}
jan@42252
   203
ML {*
jan@42252
   204
(*simplificatoin*)
jan@42252
   205
val SOME (eq3,_) = rewrite_set_ @{theory Isac} false norm_Rational eq2;
jan@42252
   206
term2str eq3; (*?A ?B not simplified*)
jan@42252
   207
*}
jan@42252
   208
ML {*
jan@42252
   209
val SOME fract1 =
jan@42252
   210
  parseNEW ctxt "(z - 1 / 2) * (z - -1 / 4) * (A / (z - 1 / 2) + B / (z - -1 / 4))"; (*A B !*)
jan@42252
   211
val SOME (fract2,_) = rewrite_set_ @{theory Isac} false norm_Rational fract1;
jan@42252
   212
term2str fract2 = "(A + -2 * B + 4 * A * z + 4 * B * z) / 4";
jan@42252
   213
(*term2str fract2 = "A * (1 / 4 + z) + B * (-1 / 2 + z)" would be more traditional*)
jan@42252
   214
*}
jan@42252
   215
ML {*
jan@42252
   216
val (numerator, denominator) = HOLogic.dest_eq eq3;
jan@42252
   217
val eq3' = HOLogic.mk_eq (numerator, fract1); (*A B !*)
jan@42252
   218
term2str eq3';
jan@42252
   219
*}
jan@42252
   220
ML {* (*MANDATORY: otherwise 3 = 0*)
jan@42252
   221
val SOME (eq3'' ,_) = rewrite_set_ @{theory Isac} false norm_Rational eq3';
jan@42252
   222
term2str eq3'';
jan@42252
   223
*}
jan@42252
   224
jan@42252
   225
subsubsection {*get first koeffizient*}
jan@42252
   226
jan@42252
   227
ML {*
jan@42252
   228
(*substitude z with the first zeropoint to get A*)
jan@42252
   229
val SOME (eq4_1,_) = rewrite_terms_ @{theory Isac} e_rew_ord e_rls [s_1] eq3'';
jan@42252
   230
term2str eq4_1;
jan@42252
   231
*}
jan@42252
   232
ML {*
jan@42252
   233
val SOME (eq4_2,_) = rewrite_set_ @{theory Isac} false norm_Rational eq4_1;
jan@42252
   234
term2str eq4_2;
jan@42252
   235
*}
jan@42252
   236
ML {*
jan@42252
   237
val fmz = ["equality (3 = 3 * A / (4::real))", "solveFor A","solutions L"];
jan@42252
   238
val (dI',pI',mI') =("Isac", ["univariate","equation"], ["no_met"]);
jan@42252
   239
jan@42252
   240
*}
jan@42252
   241
ML {*
jan@42252
   242
(*solve the simple linear equilation for A TODO: return eq, not list of eq*)
jan@42252
   243
val (p,_,fa,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
jan@42252
   244
val (p,_,fa,nxt,_,pt) = me nxt p [] pt;
jan@42252
   245
val (p,_,fa,nxt,_,pt) = me nxt p [] pt;
jan@42252
   246
val (p,_,fa,nxt,_,pt) = me nxt p [] pt;
jan@42252
   247
val (p,_,fa,nxt,_,pt) = me nxt p [] pt;
jan@42252
   248
val (p,_,fa,nxt,_,pt) = me nxt p [] pt;
jan@42252
   249
val (p,_,fa,nxt,_,pt) = me nxt p [] pt;
jan@42252
   250
val (p,_,fa,nxt,_,pt) = me nxt p [] pt;
jan@42252
   251
val (p,_,fa,nxt,_,pt) = me nxt p [] pt;
jan@42252
   252
val (p,_,fa,nxt,_,pt) = me nxt p [] pt;
jan@42252
   253
val (p,_,fa,nxt,_,pt) = me nxt p [] pt;
jan@42252
   254
val (p,_,fa,nxt,_,pt) = me nxt p [] pt;
jan@42252
   255
val (p,_,fa,nxt,_,pt) = me nxt p [] pt;
jan@42252
   256
val (p,_,fa,nxt,_,pt) = me nxt p [] pt;
jan@42252
   257
val (p,_,fa,nxt,_,pt) = me nxt p [] pt;
jan@42252
   258
val (p,_,fa,nxt,_,pt) = me nxt p [] pt;
jan@42252
   259
val (p,_,fa,nxt,_,pt) = me nxt p [] pt;
jan@42252
   260
val (p,_,fa,nxt,_,pt) = me nxt p [] pt;
jan@42252
   261
val (p,_,fa,nxt,_,pt) = me nxt p [] pt;
jan@42252
   262
val (p,_,fa,nxt,_,pt) = me nxt p [] pt;
jan@42252
   263
val (p,_,fa,nxt,_,pt) = me nxt p [] pt;
jan@42252
   264
val (p,_,fa,nxt,_,pt) = me nxt p [] pt;
jan@42252
   265
val (p,_,fa,nxt,_,pt) = me nxt p [] pt;
jan@42252
   266
val (p,_,fa,nxt,_,pt) = me nxt p [] pt;
jan@42252
   267
val (p,_,fa,nxt,_,pt) = me nxt p [] pt;
jan@42252
   268
val (p,_,fa,nxt,_,pt) = me nxt p [] pt;
jan@42252
   269
val (p,_,fa,nxt,_,pt) = me nxt p [] pt;
jan@42252
   270
*}
jan@42252
   271
ML {*
jan@42252
   272
val (p,_,fa,nxt,_,pt) = me nxt p [] pt; 
jan@42252
   273
f2str fa;
jan@42252
   274
*}
jan@42252
   275
jan@42252
   276
subsubsection {*get second koeffizient*}
jan@42252
   277
jan@42252
   278
ML {*
jan@42252
   279
(*substitude z with the second zeropoint to get B*)
jan@42252
   280
val SOME (eq4b_1,_) = rewrite_terms_ @{theory Isac} e_rew_ord e_rls [s_2] eq3'';
jan@42252
   281
term2str eq4b_1;
jan@42252
   282
*}
jan@42252
   283
jan@42252
   284
ML {*
jan@42252
   285
val SOME (eq4b_2,_) = rewrite_set_ @{theory Isac} false norm_Rational eq4b_1;
jan@42252
   286
term2str eq4b_2;
jan@42252
   287
*}
jan@42252
   288
jan@42252
   289
ML {*
jan@42252
   290
(*solve the simple linear equilation for B TODO: return eq, not list of eq*)
jan@42252
   291
val fmz = ["equality (3 = -3 * B / (4::real))", "solveFor B","solutions L"];
jan@42252
   292
val (dI',pI',mI') =("Isac", ["univariate","equation"], ["no_met"]);
jan@42252
   293
val (p,_,fb,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
jan@42252
   294
val (p,_,fb,nxt,_,pt) = me nxt p [] pt;
jan@42252
   295
val (p,_,fb,nxt,_,pt) = me nxt p [] pt;
jan@42252
   296
val (p,_,fb,nxt,_,pt) = me nxt p [] pt;
jan@42252
   297
val (p,_,fb,nxt,_,pt) = me nxt p [] pt;
jan@42252
   298
val (p,_,fb,nxt,_,pt) = me nxt p [] pt;
jan@42252
   299
val (p,_,fb,nxt,_,pt) = me nxt p [] pt;
jan@42252
   300
val (p,_,fb,nxt,_,pt) = me nxt p [] pt;
jan@42252
   301
val (p,_,fb,nxt,_,pt) = me nxt p [] pt;
jan@42252
   302
val (p,_,fb,nxt,_,pt) = me nxt p [] pt;
jan@42252
   303
val (p,_,fb,nxt,_,pt) = me nxt p [] pt;
jan@42252
   304
val (p,_,fb,nxt,_,pt) = me nxt p [] pt;
jan@42252
   305
val (p,_,fb,nxt,_,pt) = me nxt p [] pt;
jan@42252
   306
val (p,_,fb,nxt,_,pt) = me nxt p [] pt;
jan@42252
   307
val (p,_,fb,nxt,_,pt) = me nxt p [] pt;
jan@42252
   308
val (p,_,fb,nxt,_,pt) = me nxt p [] pt;
jan@42252
   309
val (p,_,fb,nxt,_,pt) = me nxt p [] pt;
jan@42252
   310
val (p,_,fb,nxt,_,pt) = me nxt p [] pt;
jan@42252
   311
val (p,_,fb,nxt,_,pt) = me nxt p [] pt;
jan@42252
   312
val (p,_,fb,nxt,_,pt) = me nxt p [] pt;
jan@42252
   313
val (p,_,fb,nxt,_,pt) = me nxt p [] pt;
jan@42252
   314
val (p,_,fb,nxt,_,pt) = me nxt p [] pt;
jan@42252
   315
val (p,_,fb,nxt,_,pt) = me nxt p [] pt;
jan@42252
   316
val (p,_,fb,nxt,_,pt) = me nxt p [] pt;
jan@42252
   317
val (p,_,fb,nxt,_,pt) = me nxt p [] pt;
jan@42252
   318
val (p,_,fb,nxt,_,pt) = me nxt p [] pt;
jan@42252
   319
val (p,_,fb,nxt,_,pt) = me nxt p [] pt;
jan@42252
   320
val (p,_,fb,nxt,_,pt) = me nxt p [] pt; 
jan@42252
   321
f2str fb;
jan@42252
   322
*}
jan@42252
   323
jan@42252
   324
ML {* (*check koeffizients*)
jan@42252
   325
if f2str fa = "[A = 4]" then () else error "part.fract. eq4_1";
jan@42252
   326
if f2str fb = "[B = -4]" then () else error "part.fract. eq4_1";
jan@42252
   327
*}
jan@42252
   328
jan@42252
   329
subsubsection {*substitute expression with solutions*}
jan@42252
   330
ML {*
jan@42252
   331
*}
jan@42252
   332
jan@42252
   333
section {*Implement the Specification and the Method*}
jan@42252
   334
text{*==============================================*}
jan@42252
   335
subsection{*Define the Specification*}
jan@42252
   336
ML {*
jan@42252
   337
val thy = @{theory};
jan@42252
   338
*}
jan@42252
   339
ML {*
jan@42252
   340
store_pbt
jan@42252
   341
 (prep_pbt thy "pbl_SP" [] e_pblID
jan@42252
   342
 (["SignalProcessing"], [], e_rls, NONE, []));
jan@42252
   343
store_pbt
jan@42252
   344
 (prep_pbt thy "pbl_SP_Ztrans" [] e_pblID
jan@42252
   345
 (["Z_Transform","SignalProcessing"], [], e_rls, NONE, []));
jan@42252
   346
store_pbt
jan@42252
   347
 (prep_pbt thy "pbl_SP_Ztrans_inv" [] e_pblID
jan@42252
   348
 (["inverse", "Z_Transform", "SignalProcessing"],
jan@42252
   349
  [("#Given" ,["equality X_eq"]),
jan@42252
   350
   ("#Find"  ,["equality n_eq"])
jan@42252
   351
  ],
jan@42252
   352
  append_rls "e_rls" e_rls [(*for preds in where_*)], NONE, 
jan@42252
   353
  [["TODO: path to method"]]));
jan@42252
   354
jan@42252
   355
show_ptyps();
jan@42252
   356
get_pbt ["inverse","Z_Transform","SignalProcessing"];
jan@42252
   357
*}
jan@42252
   358
jan@42252
   359
subsection{*Define the (Dummy-)Method*}
jan@42252
   360
subsection {*Define Name and Signature for the Method*}
jan@42252
   361
consts
jan@42252
   362
  InverseZTransform :: "[bool, bool] => bool"
jan@42252
   363
    ("((Script InverseZTransform (_ =))// (_))" 9)
jan@42252
   364
jan@42252
   365
ML {*
jan@42252
   366
store_met
jan@42252
   367
 (prep_met thy "met_SP" [] e_metID
jan@42252
   368
 (["SignalProcessing"], [],
jan@42252
   369
   {rew_ord'="tless_true", rls'= e_rls, calc = [], srls = e_rls, prls = e_rls,
jan@42252
   370
    crls = e_rls, nrls = e_rls}, "empty_script"));
jan@42252
   371
store_met
jan@42252
   372
 (prep_met thy "met_SP_Ztrans" [] e_metID
jan@42252
   373
 (["SignalProcessing", "Z_Transform"], [],
jan@42252
   374
   {rew_ord'="tless_true", rls'= e_rls, calc = [], srls = e_rls, prls = e_rls,
jan@42252
   375
    crls = e_rls, nrls = e_rls}, "empty_script"));
jan@42252
   376
*}
jan@42252
   377
ML {*
jan@42252
   378
store_met
jan@42252
   379
 (prep_met thy "met_SP_Ztrans_inv" [] e_metID
jan@42252
   380
 (["SignalProcessing", "Z_Transform", "inverse"], [],
jan@42252
   381
   {rew_ord'="tless_true", rls'= e_rls, calc = [], srls = e_rls, prls = e_rls,
jan@42252
   382
    crls = e_rls, nrls = e_rls}, 
jan@42252
   383
  "empty_script"
jan@42252
   384
 ));
jan@42252
   385
*}
jan@42252
   386
ML {*(*
jan@42252
   387
store_met
jan@42252
   388
 (prep_met thy "met_SP_Ztrans_inv" [] e_metID
jan@42252
   389
 (["SignalProcessing", "Z_Transform", "inverse"], [],
jan@42252
   390
   {rew_ord'="tless_true", rls'= e_rls, calc = [], srls = e_rls, prls = e_rls,
jan@42252
   391
    crls = e_rls, nrls = e_rls}, 
jan@42252
   392
  "Script InverseZTransform (Xeq::bool) =" ^
jan@42252
   393
  " (let X = Take Xeq;" ^
jan@42252
   394
  "      X = Rewrite ruleZY False X" ^
jan@42252
   395
  "  in X)"
jan@42252
   396
 ));
jan@42252
   397
*)*}
jan@42252
   398
ML {*
jan@42252
   399
show_mets();
jan@42252
   400
get_met ["SignalProcessing","Z_Transform","inverse"];
jan@42252
   401
*}
jan@42252
   402
jan@42252
   403
jan@42252
   404
section {*Program in CTP-based language*}
jan@42252
   405
text{*=================================*}
jan@42252
   406
subsection {*Stepwise extend Program*}
jan@42252
   407
ML {*
jan@42252
   408
val str = 
jan@42252
   409
"Script InverseZTransform (Xeq::bool) =" ^
jan@42252
   410
" Xeq";
jan@42252
   411
*}
jan@42252
   412
ML {*
jan@42252
   413
val str = 
jan@42252
   414
"Script InverseZTransform (Xeq::bool) =" ^
jan@42252
   415
" (let X = Take Xeq;" ^
jan@42252
   416
"      X = Rewrite ruleZY False X" ^
jan@42252
   417
"  in X)";
jan@42252
   418
*}
jan@42252
   419
ML {*
jan@42252
   420
val thy = @{theory};
jan@42252
   421
val sc = ((inst_abs thy) o term_of o the o (parse thy)) str;
jan@42252
   422
*}
jan@42252
   423
ML {*
jan@42252
   424
term2str sc;
jan@42252
   425
atomty sc
jan@42252
   426
*}
jan@42252
   427
jan@42252
   428
subsection {*Stepwise Execute the Program*}
jan@42252
   429
jan@42252
   430
jan@42252
   431
jan@42252
   432
jan@42252
   433
jan@42252
   434
jan@42252
   435
jan@42252
   436
jan@42252
   437
section {*Write Tests for Crucial Details*}
jan@42252
   438
text{*===================================*}
jan@42252
   439
ML {*
jan@42252
   440
jan@42252
   441
*}
jan@42252
   442
jan@42252
   443
section {*Integrate Program into Knowledge*}
jan@42252
   444
ML {*
jan@42252
   445
jan@42252
   446
*}
jan@42252
   447
jan@42252
   448
end
jan@42252
   449