src/Tools/isac/Knowledge/Inverse_Z_Transform.thy
author Jan Rocnik <jan.rocnik@student.tugraz.at>
Mon, 13 Feb 2012 17:40:30 +0100
changeset 42367 c1ebb7e759f9
parent 42366 d793c0dd4b0a
child 42405 f813ece49902
permissions -rwxr-xr-x
transformedexit! going on: documentation, latex corrections
neuper@42256
     1
(* Title:  Test_Z_Transform
neuper@42256
     2
   Author: Jan Rocnik
neuper@42256
     3
   (c) copyright due to lincense terms.
neuper@42256
     4
12345678901234567890123456789012345678901234567890123456789012345678901234567890
neuper@42256
     5
        10        20        30        40        50        60        70        80
neuper@42256
     6
*)
neuper@42256
     7
neuper@42290
     8
theory Inverse_Z_Transform imports PolyEq DiffApp Partial_Fractions begin
neuper@42256
     9
neuper@42256
    10
axiomatization where 
neuper@42256
    11
  rule1: "1 = \<delta>[n]" and
neuper@42256
    12
  rule2: "|| z || > 1 ==> z / (z - 1) = u [n]" and
neuper@42256
    13
  rule3: "|| z || < 1 ==> z / (z - 1) = -u [-n - 1]" and 
jan@42367
    14
  rule4: "c * (z / (z - \<alpha>)) = c * \<alpha>^^^n * u [n]" and
neuper@42256
    15
  rule5: "|| z || < || \<alpha> || ==> z / (z - \<alpha>) = -(\<alpha>^^^n) * u [-n - 1]" and
jan@42367
    16
  rule6: "|| z || > 1 ==> z/(z - 1)^^^2 = n * u [n]" (*and
jan@42367
    17
  rule42: "(a * (z/(z-b)) + c * (z/(z-d))) = (a * b^^^n * u [n] + c * d^^^n * u [n])"*)
neuper@42256
    18
neuper@42256
    19
axiomatization where
jan@42367
    20
  ruleZY: "(X z = a / b) = (X' z = a / (z * b))" and
jan@42367
    21
  ruleYZ: "(a/b + c/d) = (a*(z/b) + c*(z/d))" 
neuper@42256
    22
neuper@42279
    23
subsection{*Define the Field Descriptions for the specification*}
neuper@42279
    24
consts
neuper@42279
    25
  filterExpression  :: "bool => una"
neuper@42279
    26
  stepResponse      :: "bool => una"
neuper@42279
    27
jan@42366
    28
jan@42366
    29
ML {*
jan@42366
    30
val inverse_z = prep_rls(
jan@42366
    31
  Rls {id = "inverse_z", preconds = [], rew_ord = ("dummy_ord",dummy_ord), 
jan@42366
    32
	  erls = Erls, srls = Erls, calc = [],
jan@42366
    33
	  rules = 
jan@42367
    34
	   [
jan@42367
    35
    Thm ("rule4",num_str @{thm rule4})
jan@42366
    36
	   ], 
jan@42366
    37
	 scr = EmptyScr}:rls);
jan@42366
    38
*}
jan@42366
    39
jan@42366
    40
jan@42366
    41
text {*store the rule set for math engine*}
jan@42366
    42
jan@42366
    43
ML {*
jan@42366
    44
ruleset' := overwritelthy @{theory} (!ruleset',
jan@42366
    45
  [("inverse_z", inverse_z)
jan@42366
    46
   ]);
jan@42366
    47
*}
jan@42366
    48
neuper@42256
    49
subsection{*Define the Specification*}
neuper@42256
    50
ML {*
neuper@42256
    51
val thy = @{theory};
neuper@42278
    52
neuper@42256
    53
store_pbt
neuper@42256
    54
 (prep_pbt thy "pbl_SP" [] e_pblID
neuper@42256
    55
 (["SignalProcessing"], [], e_rls, NONE, []));
neuper@42256
    56
store_pbt
neuper@42256
    57
 (prep_pbt thy "pbl_SP_Ztrans" [] e_pblID
neuper@42256
    58
 (["Z_Transform","SignalProcessing"], [], e_rls, NONE, []));
neuper@42256
    59
store_pbt
neuper@42256
    60
 (prep_pbt thy "pbl_SP_Ztrans_inv" [] e_pblID
neuper@42256
    61
 (["inverse", "Z_Transform", "SignalProcessing"],
neuper@42278
    62
  [("#Given" ,["filterExpression (X_eq::bool)"]),
neuper@42278
    63
   ("#Find"  ,["stepResponse (n_eq::bool)"])
neuper@42256
    64
  ],
neuper@42256
    65
  append_rls "e_rls" e_rls [(*for preds in where_*)], NONE, 
neuper@42277
    66
  [["SignalProcessing","Z_Transform","inverse"]]));
neuper@42256
    67
*}
neuper@42256
    68
neuper@42256
    69
subsection {*Define Name and Signature for the Method*}
neuper@42256
    70
consts
neuper@42256
    71
  InverseZTransform :: "[bool, bool] => bool"
neuper@42256
    72
    ("((Script InverseZTransform (_ =))// (_))" 9)
neuper@42256
    73
neuper@42277
    74
subsection {*Setup Parent Nodes in Hierarchy of Method*}
neuper@42256
    75
ML {*
neuper@42256
    76
store_met
neuper@42256
    77
 (prep_met thy "met_SP" [] e_metID
neuper@42256
    78
 (["SignalProcessing"], [],
neuper@42256
    79
   {rew_ord'="tless_true", rls'= e_rls, calc = [], srls = e_rls, prls = e_rls,
neuper@42256
    80
    crls = e_rls, nrls = e_rls}, "empty_script"));
neuper@42256
    81
store_met
neuper@42256
    82
 (prep_met thy "met_SP_Ztrans" [] e_metID
neuper@42256
    83
 (["SignalProcessing", "Z_Transform"], [],
neuper@42256
    84
   {rew_ord'="tless_true", rls'= e_rls, calc = [], srls = e_rls, prls = e_rls,
neuper@42256
    85
    crls = e_rls, nrls = e_rls}, "empty_script"));
neuper@42256
    86
val thy = @{theory}; (*latest version of thy required*)
neuper@42256
    87
store_met
neuper@42256
    88
 (prep_met thy "met_SP_Ztrans_inv" [] e_metID
neuper@42256
    89
 (["SignalProcessing", "Z_Transform", "inverse"], 
neuper@42278
    90
  [("#Given" ,["filterExpression (X_eq::bool)"]),
neuper@42278
    91
   ("#Find"  ,["stepResponse (n_eq::bool)"])
neuper@42256
    92
  ],
neuper@42256
    93
   {rew_ord'="tless_true", rls'= e_rls, calc = [], srls = e_rls, prls = e_rls,
neuper@42256
    94
    crls = e_rls, nrls = e_rls},
neuper@42281
    95
"Script InverseZTransform (X_eq::bool) =" ^ (*(1/z) instead of z ^^^ -1*)
neuper@42281
    96
" (let X = Take X_eq;" ^
neuper@42281
    97
"      X' = Rewrite ruleZY False X;" ^ (*z * denominator*)
neuper@42281
    98
"      X' = (Rewrite_Set norm_Rational False) X';" ^ (*simplify*)
neuper@42290
    99
"      funterm = Take (rhs X');" ^ (*drop X' z = for equation solving*)
neuper@42290
   100
"      denom = (Rewrite_Set partial_fraction False) funterm;" ^ (*get_denominator*)
neuper@42290
   101
"      equ = (denom = (0::real));" ^
neuper@42290
   102
"      fun_arg = Take (lhs X');" ^
neuper@42290
   103
"      arg = (Rewrite_Set partial_fraction False) X';" ^ (*get_argument TODO*)
neuper@42290
   104
"      (L_L::bool list) =                                    " ^
neuper@42290
   105
"            (SubProblem (Test',                            " ^
neuper@42290
   106
"                         [linear,univariate,equation,test]," ^
neuper@42290
   107
"                         [Test,solve_linear])              " ^
neuper@42290
   108
"                        [BOOL equ, REAL z])              " ^
neuper@42281
   109
"  in X)"
neuper@42256
   110
 ));
neuper@42256
   111
*}
neuper@42256
   112
neuper@42256
   113
end
neuper@42256
   114