src/HOL/Complex/Complex.ML
author kleing
Tue, 13 May 2003 08:59:21 +0200
changeset 14024 213dcc39358f
parent 13957 10dbf16be15f
child 14269 502a7c95de73
permissions -rw-r--r--
HOL-Real -> HOL-Complex
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13957
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
     1
(*  Title:       Complex.ML
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
     2
    Author:      Jacques D. Fleuriot
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
     3
    Copyright:   2001  University of Edinburgh
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
     4
    Description: Complex numbers
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
     5
*)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
     6
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
     7
Goal "inj Rep_complex";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
     8
by (rtac inj_inverseI 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
     9
by (rtac Rep_complex_inverse 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    10
qed "inj_Rep_complex";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    11
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    12
Goal "inj Abs_complex";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    13
by (rtac inj_inverseI 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    14
by (rtac Abs_complex_inverse 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    15
by (simp_tac (simpset() addsimps [complex_def]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    16
qed "inj_Abs_complex";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    17
Addsimps [inj_Abs_complex RS injD];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    18
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    19
Goal "(Abs_complex x = Abs_complex y) = (x = y)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    20
by (auto_tac (claset() addDs [inj_Abs_complex RS injD],simpset()));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    21
qed "Abs_complex_cancel_iff";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    22
Addsimps [Abs_complex_cancel_iff]; 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    23
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    24
Goalw [complex_def] "(x,y) : complex";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    25
by (Auto_tac);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    26
qed "pair_mem_complex";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    27
Addsimps [pair_mem_complex];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    28
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    29
Goal "Rep_complex (Abs_complex (x,y)) = (x,y)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    30
by (simp_tac (simpset() addsimps [Abs_complex_inverse]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    31
qed "Abs_complex_inverse2";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    32
Addsimps [Abs_complex_inverse2];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    33
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    34
val [prem] = goal Complex.thy
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    35
    "(!!x y. z = Abs_complex(x,y) ==> P) ==> P";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    36
by (res_inst_tac [("p","Rep_complex z")] PairE 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    37
by (dres_inst_tac [("f","Abs_complex")] arg_cong 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    38
by (res_inst_tac [("x","x"),("y","y")] prem 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    39
by (asm_full_simp_tac (simpset() addsimps [Rep_complex_inverse]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    40
qed "eq_Abs_complex";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    41
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    42
Goalw [Re_def] "Re(Abs_complex(x,y)) = x";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    43
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    44
qed "Re";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    45
Addsimps [Re];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    46
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    47
Goalw [Im_def] "Im(Abs_complex(x,y)) = y";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    48
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    49
qed "Im";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    50
Addsimps [Im];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    51
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    52
Goal "Abs_complex(Re(z),Im(z)) = z";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    53
by (res_inst_tac [("z","z")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    54
by (Asm_simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    55
qed "Abs_complex_cancel";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    56
Addsimps [Abs_complex_cancel];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    57
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    58
Goal "(w=z) = (Re(w) = Re(z) & Im(w) = Im(z))";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    59
by (res_inst_tac [("z","w")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    60
by (res_inst_tac [("z","z")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    61
by (auto_tac (claset() addDs [inj_Abs_complex RS injD],simpset()));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    62
qed "complex_Re_Im_cancel_iff";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    63
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    64
Goalw [complex_zero_def] "Re 0 = 0";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    65
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    66
qed "complex_Re_zero";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    67
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    68
Goalw [complex_zero_def] "Im 0 = 0";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    69
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    70
qed "complex_Im_zero";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    71
Addsimps [complex_Re_zero,complex_Im_zero];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    72
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    73
Goalw [complex_one_def] "Re 1 = 1";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    74
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    75
qed "complex_Re_one";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    76
Addsimps [complex_Re_one];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    77
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    78
Goalw [complex_one_def] "Im 1 = 0";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    79
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    80
qed "complex_Im_one";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    81
Addsimps [complex_Im_one];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    82
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    83
Goalw [i_def] "Re(ii) = 0";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    84
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    85
qed "complex_Re_i";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    86
Addsimps [complex_Re_i];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    87
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    88
Goalw [i_def] "Im(ii) = 1";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    89
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    90
qed "complex_Im_i";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    91
Addsimps [complex_Im_i];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    92
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    93
Goalw [complex_of_real_def] "Re(complex_of_real 0) = 0";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    94
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    95
qed "Re_complex_of_real_zero";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    96
Addsimps [Re_complex_of_real_zero];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    97
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    98
Goalw [complex_of_real_def] "Im(complex_of_real 0) = 0";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    99
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   100
qed "Im_complex_of_real_zero";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   101
Addsimps [Im_complex_of_real_zero];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   102
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   103
Goalw [complex_of_real_def] "Re(complex_of_real 1) = 1";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   104
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   105
qed "Re_complex_of_real_one";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   106
Addsimps [Re_complex_of_real_one];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   107
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   108
Goalw [complex_of_real_def] "Im(complex_of_real 1) = 0";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   109
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   110
qed "Im_complex_of_real_one";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   111
Addsimps [Im_complex_of_real_one];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   112
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   113
Goalw [complex_of_real_def] "Re(complex_of_real z) = z";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   114
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   115
qed "Re_complex_of_real";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   116
Addsimps [Re_complex_of_real];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   117
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   118
Goalw [complex_of_real_def] "Im(complex_of_real z) = 0";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   119
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   120
qed "Im_complex_of_real";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   121
Addsimps [Im_complex_of_real];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   122
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   123
(*** negation ***)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   124
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   125
Goalw [complex_minus_def] "- Abs_complex(x,y) = Abs_complex(-x,-y)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   126
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   127
qed "complex_minus";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   128
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   129
Goalw [Re_def] "Re (-z) = - Re z";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   130
by (res_inst_tac [("z","z")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   131
by (auto_tac (claset(),simpset() addsimps [complex_minus]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   132
qed "complex_Re_minus";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   133
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   134
Goalw [Im_def] "Im (-z) = - Im z";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   135
by (res_inst_tac [("z","z")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   136
by (auto_tac (claset(),simpset() addsimps [complex_minus]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   137
qed "complex_Im_minus";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   138
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   139
Goalw [complex_minus_def] "- (- z) = (z::complex)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   140
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   141
qed "complex_minus_minus";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   142
Addsimps [complex_minus_minus];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   143
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   144
Goal "inj(%r::complex. -r)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   145
by (rtac injI 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   146
by (dres_inst_tac [("f","uminus")] arg_cong 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   147
by (Asm_full_simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   148
qed "inj_complex_minus";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   149
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   150
Goalw [complex_zero_def] "-(0::complex) = 0";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   151
by (simp_tac (simpset() addsimps [complex_minus]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   152
qed "complex_minus_zero";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   153
Addsimps [complex_minus_zero];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   154
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   155
Goal "(-x = 0) = (x = (0::complex))"; 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   156
by (res_inst_tac [("z","x")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   157
by (auto_tac (claset() addDs [inj_Abs_complex RS injD],simpset() 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   158
    addsimps [complex_zero_def,complex_minus]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   159
qed "complex_minus_zero_iff";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   160
Addsimps [complex_minus_zero_iff];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   161
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   162
Goal "(0 = -x) = (x = (0::real))"; 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   163
by (auto_tac (claset() addDs [sym],simpset()));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   164
qed "complex_minus_zero_iff2";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   165
Addsimps [complex_minus_zero_iff2];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   166
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   167
Goal "(-x ~= 0) = (x ~= (0::complex))"; 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   168
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   169
qed "complex_minus_not_zero_iff";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   170
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   171
(*** addition ***)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   172
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   173
Goalw [complex_add_def]
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   174
      "Abs_complex(x1,y1) + Abs_complex(x2,y2) = Abs_complex(x1+x2,y1+y2)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   175
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   176
qed "complex_add";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   177
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   178
Goalw [Re_def] "Re(x + y) = Re(x) + Re(y)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   179
by (res_inst_tac [("z","x")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   180
by (res_inst_tac [("z","y")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   181
by (auto_tac (claset(),simpset() addsimps [complex_add]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   182
qed "complex_Re_add";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   183
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   184
Goalw [Im_def] "Im(x + y) = Im(x) + Im(y)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   185
by (res_inst_tac [("z","x")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   186
by (res_inst_tac [("z","y")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   187
by (auto_tac (claset(),simpset() addsimps [complex_add]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   188
qed "complex_Im_add";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   189
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   190
Goalw [complex_add_def] "(u::complex) + v = v + u";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   191
by (simp_tac (simpset() addsimps [real_add_commute]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   192
qed "complex_add_commute";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   193
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   194
Goalw [complex_add_def] "((u::complex) + v) + w = u + (v + w)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   195
by (simp_tac (simpset() addsimps [real_add_assoc]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   196
qed "complex_add_assoc";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   197
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   198
Goalw [complex_add_def] "(x::complex) + (y + z) = y + (x + z)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   199
by (simp_tac (simpset() addsimps [real_add_left_commute]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   200
qed "complex_add_left_commute";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   201
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   202
val complex_add_ac = [complex_add_assoc,complex_add_commute,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   203
                      complex_add_left_commute];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   204
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   205
Goalw [complex_add_def,complex_zero_def] "(0::complex) + z = z";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   206
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   207
qed "complex_add_zero_left";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   208
Addsimps [complex_add_zero_left];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   209
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   210
Goalw [complex_add_def,complex_zero_def] "z + (0::complex) = z";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   211
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   212
qed "complex_add_zero_right";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   213
Addsimps [complex_add_zero_right];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   214
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   215
Goalw [complex_add_def,complex_minus_def,complex_zero_def] 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   216
      "z + -z = (0::complex)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   217
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   218
qed "complex_add_minus_right_zero";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   219
Addsimps [complex_add_minus_right_zero];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   220
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   221
Goalw [complex_add_def,complex_minus_def,complex_zero_def] 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   222
      "-z + z = (0::complex)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   223
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   224
qed "complex_add_minus_left_zero";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   225
Addsimps [complex_add_minus_left_zero];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   226
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   227
Goal "z + (- z + w) = (w::complex)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   228
by (simp_tac (simpset() addsimps [complex_add_assoc RS sym]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   229
qed "complex_add_minus_cancel";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   230
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   231
Goal "(-z) + (z + w) = (w::complex)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   232
by (simp_tac (simpset() addsimps [complex_add_assoc RS sym]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   233
qed "complex_minus_add_cancel";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   234
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   235
Addsimps [complex_add_minus_cancel, complex_minus_add_cancel];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   236
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   237
Goal "x + y = (0::complex) ==> x = -y";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   238
by (auto_tac (claset(),simpset() addsimps [complex_Re_Im_cancel_iff,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   239
    complex_Re_add,complex_Im_add,complex_Re_minus,complex_Im_minus]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   240
qed "complex_add_minus_eq_minus";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   241
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   242
Goal "-(x + y) = -x + -(y::complex)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   243
by (res_inst_tac [("z","x")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   244
by (res_inst_tac [("z","y")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   245
by (auto_tac (claset(),simpset() addsimps [complex_minus,complex_add]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   246
qed "complex_minus_add_distrib";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   247
Addsimps [complex_minus_add_distrib];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   248
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   249
Goal "((x::complex) + y = x + z) = (y = z)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   250
by (Step_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   251
by (dres_inst_tac [("f","%t.-x + t")] arg_cong 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   252
by (asm_full_simp_tac (simpset() addsimps [complex_add_assoc RS sym]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   253
qed "complex_add_left_cancel";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   254
AddIffs [complex_add_left_cancel];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   255
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   256
Goal "(y + (x::complex)= z + x) = (y = z)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   257
by (simp_tac (simpset() addsimps [complex_add_commute]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   258
qed "complex_add_right_cancel";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   259
Addsimps [complex_add_right_cancel];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   260
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   261
Goal "((x::complex) = y) = (0 = x + - y)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   262
by (Step_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   263
by (res_inst_tac [("x1","-y")] 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   264
      (complex_add_right_cancel RS iffD1) 2);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   265
by (Auto_tac);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   266
qed "complex_eq_minus_iff"; 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   267
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   268
Goal "((x::complex) = y) = (x + - y = 0)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   269
by (Step_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   270
by (res_inst_tac [("x1","-y")] 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   271
      (complex_add_right_cancel RS iffD1) 2);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   272
by (Auto_tac);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   273
qed "complex_eq_minus_iff2"; 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   274
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   275
Goal "(0::complex) - x = -x";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   276
by (simp_tac (simpset() addsimps [complex_diff_def]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   277
qed "complex_diff_0";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   278
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   279
Goal "x - (0::complex) = x";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   280
by (simp_tac (simpset() addsimps [complex_diff_def]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   281
qed "complex_diff_0_right";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   282
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   283
Goal "x - x = (0::complex)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   284
by (simp_tac (simpset() addsimps [complex_diff_def]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   285
qed "complex_diff_self";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   286
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   287
Addsimps [complex_diff_0, complex_diff_0_right, complex_diff_self];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   288
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   289
Goalw [complex_diff_def]
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   290
      "Abs_complex(x1,y1) - Abs_complex(x2,y2) = Abs_complex(x1-x2,y1-y2)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   291
by (simp_tac (simpset() addsimps [complex_add,complex_minus]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   292
qed "complex_diff";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   293
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   294
Goal "((x::complex) - y = z) = (x = z + y)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   295
by (auto_tac (claset(),simpset() addsimps [complex_diff_def,complex_add_assoc]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   296
qed "complex_diff_eq_eq";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   297
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   298
(*** complex multiplication ***)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   299
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   300
Goalw [complex_mult_def]
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   301
      "Abs_complex(x1,y1) * Abs_complex(x2,y2) = \
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   302
\      Abs_complex(x1*x2 - y1*y2,x1*y2 + y1*x2)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   303
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   304
qed "complex_mult";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   305
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   306
Goalw [complex_mult_def] "(w::complex) * z = z * w";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   307
by (simp_tac (simpset() addsimps [real_mult_commute,real_add_commute]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   308
qed "complex_mult_commute";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   309
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   310
Goalw [complex_mult_def] "((u::complex) * v) * w = u * (v * w)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   311
by (simp_tac (simpset() addsimps [complex_Re_Im_cancel_iff,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   312
    real_mult_assoc,real_diff_mult_distrib2,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   313
    real_add_mult_distrib2,real_diff_mult_distrib,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   314
    real_add_mult_distrib,real_mult_left_commute]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   315
qed "complex_mult_assoc";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   316
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   317
Goalw [complex_mult_def] "(x::complex) * (y * z) = y * (x * z)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   318
by (simp_tac (simpset() addsimps [complex_Re_Im_cancel_iff,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   319
    real_mult_left_commute,real_diff_mult_distrib2,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   320
    real_add_mult_distrib2]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   321
qed "complex_mult_left_commute";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   322
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   323
val complex_mult_ac = [complex_mult_assoc,complex_mult_commute,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   324
                      complex_mult_left_commute];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   325
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   326
Goalw [complex_one_def] "(1::complex) * z = z";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   327
by (res_inst_tac [("z","z")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   328
by (asm_simp_tac (simpset() addsimps [complex_mult]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   329
qed "complex_mult_one_left";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   330
Addsimps [complex_mult_one_left];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   331
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   332
Goal "z * (1::complex) = z";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   333
by (simp_tac (simpset() addsimps [complex_mult_commute]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   334
qed "complex_mult_one_right";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   335
Addsimps [complex_mult_one_right];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   336
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   337
Goalw [complex_zero_def] "(0::complex) * z = 0";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   338
by (res_inst_tac [("z","z")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   339
by (asm_simp_tac (simpset() addsimps [complex_mult]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   340
qed "complex_mult_zero_left";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   341
Addsimps [complex_mult_zero_left];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   342
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   343
Goal "z * 0 = (0::complex)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   344
by (simp_tac (simpset() addsimps [complex_mult_commute]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   345
qed "complex_mult_zero_right";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   346
Addsimps [complex_mult_zero_right];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   347
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   348
Goalw [complex_divide_def] "0 / z = (0::complex)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   349
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   350
qed "complex_divide_zero";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   351
Addsimps [complex_divide_zero];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   352
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   353
Goal "-(x * y) = -x * (y::complex)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   354
by (res_inst_tac [("z","x")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   355
by (res_inst_tac [("z","y")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   356
by (auto_tac (claset(),simpset() addsimps [complex_mult,complex_minus,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   357
    real_diff_def]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   358
qed "complex_minus_mult_eq1";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   359
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   360
Goal "-(x * y) = x * -(y::complex)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   361
by (res_inst_tac [("z","x")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   362
by (res_inst_tac [("z","y")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   363
by (auto_tac (claset(),simpset() addsimps [complex_mult,complex_minus,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   364
    real_diff_def]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   365
qed "complex_minus_mult_eq2";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   366
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   367
Addsimps [ complex_minus_mult_eq1 RS sym, complex_minus_mult_eq2 RS sym];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   368
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   369
Goal "-(1::complex) * z = -z";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   370
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   371
qed "complex_mult_minus_one";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   372
Addsimps [complex_mult_minus_one];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   373
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   374
Goal "z * -(1::complex) = -z";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   375
by (stac complex_mult_commute 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   376
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   377
qed "complex_mult_minus_one_right";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   378
Addsimps [complex_mult_minus_one_right];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   379
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   380
Goal "-x * -y = x * (y::complex)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   381
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   382
qed "complex_minus_mult_cancel";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   383
Addsimps [complex_minus_mult_cancel];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   384
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   385
Goal "-x * y = x * -(y::complex)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   386
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   387
qed "complex_minus_mult_commute";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   388
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   389
qed_goal "complex_add_assoc_cong" thy
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   390
    "!!z. (z::complex) + v = z' + v' ==> z + (v + w) = z' + (v' + w)"
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   391
 (fn _ => [(asm_simp_tac (simpset() addsimps [complex_add_assoc RS sym]) 1)]);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   392
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   393
qed_goal "complex_add_assoc_swap" thy "(z::complex) + (v + w) = v + (z + w)"
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   394
 (fn _ => [(REPEAT (ares_tac [complex_add_commute RS complex_add_assoc_cong] 1))]);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   395
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   396
Goal "((z1::complex) + z2) * w = (z1 * w) + (z2 * w)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   397
by (res_inst_tac [("z","z1")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   398
by (res_inst_tac [("z","z2")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   399
by (res_inst_tac [("z","w")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   400
by (auto_tac (claset(),simpset() addsimps [complex_mult,complex_add,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   401
    real_add_mult_distrib,real_diff_def] @ real_add_ac));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   402
qed "complex_add_mult_distrib";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   403
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   404
Goal "(w::complex) * (z1 + z2) = (w * z1) + (w * z2)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   405
by (res_inst_tac [("z1","z1 + z2")] (complex_mult_commute RS ssubst) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   406
by (simp_tac (simpset() addsimps [complex_add_mult_distrib]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   407
by (simp_tac (simpset() addsimps [complex_mult_commute]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   408
qed "complex_add_mult_distrib2";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   409
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   410
Goalw [complex_zero_def,complex_one_def] "(0::complex) ~= 1";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   411
by (simp_tac (simpset() addsimps [complex_Re_Im_cancel_iff]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   412
qed "complex_zero_not_eq_one";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   413
Addsimps [complex_zero_not_eq_one];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   414
Addsimps [complex_zero_not_eq_one RS not_sym];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   415
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   416
(*** inverse ***)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   417
Goalw [complex_inverse_def] "inverse (Abs_complex(x,y)) = \
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   418
\    Abs_complex(x/(x ^ 2 + y ^ 2),-y/(x ^ 2 + y ^ 2))";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   419
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   420
qed "complex_inverse";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   421
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   422
Goalw [complex_inverse_def,complex_zero_def] "inverse 0 = (0::complex)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   423
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   424
qed "COMPLEX_INVERSE_ZERO";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   425
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   426
Goal "a / (0::complex) = 0";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   427
by (simp_tac (simpset() addsimps [complex_divide_def, COMPLEX_INVERSE_ZERO]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   428
qed "COMPLEX_DIVISION_BY_ZERO";  (*NOT for adding to default simpset*)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   429
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   430
fun complex_div_undefined_case_tac s i =
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   431
  case_tac s i THEN 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   432
  asm_simp_tac (simpset() addsimps [COMPLEX_DIVISION_BY_ZERO, COMPLEX_INVERSE_ZERO]) i;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   433
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   434
(*REMOVE?:
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   435
lemmas:replace previous versions to accommodate new behaviour of simplification
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   436
Goal "x ^ 2 + y ^ 2 = 0 ==> x = (0::real)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   437
by (auto_tac (claset() addIs [real_sum_squares_cancel],
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   438
    simpset() addsimps [CLAIM "2 = Suc(Suc 0)"]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   439
qed "real_sum_squares_cancel";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   440
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   441
Goal "x ^ 2 + y ^ 2 = 0 ==> y = (0::real)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   442
by (auto_tac (claset() addIs [real_sum_squares_cancel2],
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   443
    simpset() addsimps [CLAIM "2 = Suc(Suc 0)"]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   444
qed "real_sum_squares_cancel2";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   445
*)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   446
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   447
Goal "z ~= (0::complex) ==> inverse(z) * z = 1";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   448
by (res_inst_tac [("z","z")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   449
by (auto_tac (claset(),simpset() addsimps [complex_mult,complex_inverse,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   450
    complex_one_def,complex_zero_def,real_add_divide_distrib RS sym,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   451
    realpow_two_eq_mult] @ real_mult_ac));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   452
by (dres_inst_tac [("y","y")] real_sum_squares_not_zero 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   453
by (dres_inst_tac [("x","x")] real_sum_squares_not_zero2 2);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   454
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   455
qed "complex_mult_inv_left";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   456
Addsimps [complex_mult_inv_left];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   457
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   458
Goal "z ~= (0::complex) ==> z * inverse(z) = 1";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   459
by (auto_tac (claset() addIs [complex_mult_commute RS subst],simpset()));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   460
qed "complex_mult_inv_right";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   461
Addsimps [complex_mult_inv_right];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   462
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   463
Goal "(c::complex) ~= 0 ==> (c*a=c*b) = (a=b)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   464
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   465
by (dres_inst_tac [("f","%x. x*inverse c")] arg_cong 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   466
by (asm_full_simp_tac (simpset() addsimps complex_mult_ac)  1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   467
qed "complex_mult_left_cancel";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   468
    
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   469
Goal "(c::complex) ~= 0 ==> (a*c=b*c) = (a=b)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   470
by (Step_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   471
by (dres_inst_tac [("f","%x. x*inverse c")] arg_cong 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   472
by (asm_full_simp_tac (simpset() addsimps complex_mult_ac)  1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   473
qed "complex_mult_right_cancel";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   474
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   475
Goal "z ~= 0 ==> inverse(z::complex) ~= 0";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   476
by (Step_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   477
by (ftac (complex_mult_right_cancel RS iffD2) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   478
by (thin_tac "inverse z = 0" 2);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   479
by (assume_tac 1 THEN Auto_tac);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   480
qed "complex_inverse_not_zero";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   481
Addsimps [complex_inverse_not_zero];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   482
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   483
Goal "!!x. [| x ~= 0; y ~= (0::complex) |] ==> x * y ~= 0";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   484
by (Step_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   485
by (dres_inst_tac [("f","%z. inverse x*z")] arg_cong 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   486
by (asm_full_simp_tac (simpset() addsimps [complex_mult_assoc RS sym]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   487
qed "complex_mult_not_zero";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   488
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   489
bind_thm ("complex_mult_not_zeroE",complex_mult_not_zero RS notE);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   490
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   491
Goal "inverse(inverse (x::complex)) = x";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   492
by (complex_div_undefined_case_tac "x = 0" 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   493
by (res_inst_tac [("c1","inverse x")] (complex_mult_right_cancel RS iffD1) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   494
by (etac complex_inverse_not_zero 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   495
by (auto_tac (claset() addDs [complex_inverse_not_zero],simpset()));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   496
qed "complex_inverse_inverse";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   497
Addsimps [complex_inverse_inverse];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   498
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   499
Goalw [complex_one_def] "inverse(1::complex) = 1";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   500
by (simp_tac (simpset() addsimps [complex_inverse,realpow_num_two]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   501
qed "complex_inverse_one";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   502
Addsimps [complex_inverse_one];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   503
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   504
Goal "inverse(-x) = -inverse(x::complex)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   505
by (complex_div_undefined_case_tac "x = 0" 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   506
by (res_inst_tac [("c1","-x")] (complex_mult_right_cancel RS iffD1) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   507
by (stac complex_mult_inv_left 2);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   508
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   509
qed "complex_minus_inverse";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   510
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   511
Goal "inverse(x*y) = inverse x * inverse (y::complex)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   512
by (complex_div_undefined_case_tac "x = 0" 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   513
by (complex_div_undefined_case_tac "y = 0" 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   514
by (res_inst_tac [("c1","x*y")] (complex_mult_left_cancel RS iffD1) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   515
by (auto_tac (claset(),simpset() addsimps [complex_mult_not_zero]
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   516
    @ complex_mult_ac));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   517
by (auto_tac (claset(),simpset() addsimps [complex_mult_not_zero,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   518
    complex_mult_assoc RS sym]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   519
qed "complex_inverse_distrib";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   520
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   521
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   522
(*** division ***)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   523
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   524
(*adding some of these theorems to simpset as for reals: 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   525
  not 100% convinced for some*)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   526
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   527
Goal "(x::complex) * (y/z) = (x*y)/z";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   528
by (simp_tac (simpset() addsimps [complex_divide_def, complex_mult_assoc]) 1); 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   529
qed "complex_times_divide1_eq";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   530
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   531
Goal "(y/z) * (x::complex) = (y*x)/z";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   532
by (simp_tac (simpset() addsimps [complex_divide_def]@complex_mult_ac) 1); 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   533
qed "complex_times_divide2_eq";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   534
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   535
Addsimps [complex_times_divide1_eq, complex_times_divide2_eq];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   536
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   537
Goal "(x::complex) / (y/z) = (x*z)/y";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   538
by (simp_tac (simpset() addsimps [complex_divide_def, complex_inverse_distrib]@
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   539
                                  complex_mult_ac) 1); 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   540
qed "complex_divide_divide1_eq";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   541
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   542
Goal "((x::complex) / y) / z = x/(y*z)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   543
by (simp_tac (simpset() addsimps [complex_divide_def, complex_inverse_distrib, 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   544
                                  complex_mult_assoc]) 1); 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   545
qed "complex_divide_divide2_eq";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   546
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   547
Addsimps [complex_divide_divide1_eq, complex_divide_divide2_eq];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   548
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   549
(** As with multiplication, pull minus signs OUT of the / operator **)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   550
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   551
Goal "(-x) / (y::complex) = - (x/y)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   552
by (simp_tac (simpset() addsimps [complex_divide_def]) 1); 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   553
qed "complex_minus_divide_eq";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   554
Addsimps [complex_minus_divide_eq];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   555
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   556
Goal "(x / -(y::complex)) = - (x/y)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   557
by (simp_tac (simpset() addsimps [complex_divide_def, complex_minus_inverse]) 1); 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   558
qed "complex_divide_minus_eq";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   559
Addsimps [complex_divide_minus_eq];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   560
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   561
Goal "(x+y)/(z::complex) = x/z + y/z";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   562
by (simp_tac (simpset() addsimps [complex_divide_def, complex_add_mult_distrib]) 1); 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   563
qed "complex_add_divide_distrib";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   564
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   565
(*---------------------------------------------------------------------------*)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   566
(*          Embedding properties for complex_of_real map                     *)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   567
(*---------------------------------------------------------------------------*)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   568
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   569
Goal "inj complex_of_real";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   570
by (rtac injI 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   571
by (auto_tac (claset() addDs [inj_Abs_complex RS injD],
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   572
    simpset() addsimps [complex_of_real_def]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   573
qed "inj_complex_of_real";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   574
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   575
Goalw [complex_one_def,complex_of_real_def]
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   576
      "complex_of_real 1 = 1";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   577
by (rtac refl 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   578
qed "complex_of_real_one";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   579
Addsimps [complex_of_real_one];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   580
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   581
Goalw [complex_zero_def,complex_of_real_def]
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   582
      "complex_of_real 0 = 0";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   583
by (rtac refl 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   584
qed "complex_of_real_zero";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   585
Addsimps [complex_of_real_zero];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   586
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   587
Goal "(complex_of_real x = complex_of_real y) = (x = y)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   588
by (auto_tac (claset() addDs [inj_complex_of_real RS injD],simpset()));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   589
qed "complex_of_real_eq_iff";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   590
AddIffs [complex_of_real_eq_iff];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   591
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   592
Goal "complex_of_real(-x) = - complex_of_real x";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   593
by (simp_tac (simpset() addsimps [complex_of_real_def,complex_minus]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   594
qed "complex_of_real_minus";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   595
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   596
Goal "complex_of_real(inverse x) = inverse(complex_of_real x)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   597
by (real_div_undefined_case_tac "x=0" 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   598
by (simp_tac (simpset() addsimps [DIVISION_BY_ZERO,COMPLEX_INVERSE_ZERO]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   599
by (auto_tac (claset(),simpset() addsimps [complex_inverse,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   600
    complex_of_real_def,realpow_num_two,real_divide_def,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   601
    real_inverse_distrib]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   602
qed "complex_of_real_inverse";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   603
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   604
Goal "complex_of_real x + complex_of_real y = complex_of_real (x + y)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   605
by (simp_tac (simpset() addsimps [complex_add,complex_of_real_def]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   606
qed "complex_of_real_add";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   607
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   608
Goal "complex_of_real x - complex_of_real y = complex_of_real (x - y)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   609
by (simp_tac (simpset() addsimps [complex_of_real_minus RS sym,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   610
    complex_diff_def,complex_of_real_add]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   611
qed "complex_of_real_diff";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   612
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   613
Goal "complex_of_real x * complex_of_real y = complex_of_real (x * y)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   614
by (simp_tac (simpset() addsimps [complex_mult,complex_of_real_def]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   615
qed "complex_of_real_mult";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   616
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   617
Goalw [complex_divide_def] 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   618
      "complex_of_real x / complex_of_real y = complex_of_real(x/y)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   619
by (real_div_undefined_case_tac "y=0" 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   620
by (simp_tac (simpset() addsimps [rename_numerals DIVISION_BY_ZERO,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   621
    COMPLEX_INVERSE_ZERO]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   622
by (asm_simp_tac (simpset() addsimps [complex_of_real_mult RS sym,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   623
    complex_of_real_inverse,real_divide_def]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   624
qed "complex_of_real_divide";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   625
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   626
Goal "complex_of_real (x ^ n) = (complex_of_real x) ^ n";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   627
by (induct_tac "n" 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   628
by (auto_tac (claset(),simpset() addsimps [complex_of_real_mult RS sym]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   629
qed "complex_of_real_pow";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   630
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   631
Goalw [cmod_def] "cmod (Abs_complex(x,y)) = sqrt(x ^ 2 + y ^ 2)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   632
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   633
qed "complex_mod";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   634
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   635
Goalw [cmod_def] "cmod(0) = 0";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   636
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   637
qed "complex_mod_zero";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   638
Addsimps [complex_mod_zero];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   639
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   640
Goalw [cmod_def] "cmod(1) = 1";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   641
by (simp_tac (simpset() addsimps [realpow_num_two]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   642
qed "complex_mod_one";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   643
Addsimps [complex_mod_one];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   644
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   645
Goalw [complex_of_real_def] "cmod(complex_of_real x) = abs x";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   646
by (simp_tac (simpset() addsimps [complex_mod,realpow_num_two]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   647
qed "complex_mod_complex_of_real";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   648
Addsimps [complex_mod_complex_of_real];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   649
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   650
Goal "complex_of_real (abs x) = complex_of_real(cmod(complex_of_real x))";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   651
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   652
qed "complex_of_real_abs";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   653
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   654
(*---------------------------------------------------------------------------*)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   655
(*                   conjugation is an automorphism                          *)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   656
(*---------------------------------------------------------------------------*)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   657
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   658
Goalw [cnj_def] "cnj (Abs_complex(x,y)) = Abs_complex(x,-y)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   659
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   660
qed "complex_cnj";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   661
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   662
Goal "inj cnj";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   663
by (rtac injI 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   664
by (auto_tac (claset(),simpset() addsimps [cnj_def,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   665
    Abs_complex_cancel_iff,complex_Re_Im_cancel_iff]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   666
qed "inj_cnj";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   667
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   668
Goal "(cnj x = cnj y) = (x = y)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   669
by (auto_tac (claset() addDs [inj_cnj RS injD],simpset()));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   670
qed "complex_cnj_cancel_iff";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   671
Addsimps [complex_cnj_cancel_iff];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   672
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   673
Goalw [cnj_def] "cnj (cnj z) = z";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   674
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   675
qed "complex_cnj_cnj";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   676
Addsimps [complex_cnj_cnj];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   677
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   678
Goalw [complex_of_real_def] "cnj (complex_of_real x) = complex_of_real x";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   679
by (simp_tac (simpset() addsimps [complex_cnj]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   680
qed "complex_cnj_complex_of_real";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   681
Addsimps [complex_cnj_complex_of_real];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   682
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   683
Goal "cmod (cnj z) = cmod z";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   684
by (res_inst_tac [("z","z")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   685
by (asm_simp_tac (simpset() addsimps [complex_cnj,complex_mod,realpow_num_two]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   686
qed "complex_mod_cnj";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   687
Addsimps [complex_mod_cnj];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   688
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   689
Goalw [cnj_def] "cnj (-z) = - cnj z";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   690
by (simp_tac (simpset() addsimps [complex_minus,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   691
    complex_Re_minus,complex_Im_minus]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   692
qed "complex_cnj_minus";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   693
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   694
Goal "cnj(inverse z) = inverse(cnj z)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   695
by (res_inst_tac [("z","z")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   696
by (asm_simp_tac (simpset() addsimps [complex_cnj,complex_inverse,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   697
    realpow_num_two]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   698
qed "complex_cnj_inverse";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   699
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   700
Goal "cnj(w + z) = cnj(w) + cnj(z)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   701
by (res_inst_tac [("z","w")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   702
by (res_inst_tac [("z","z")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   703
by (asm_simp_tac (simpset() addsimps [complex_cnj,complex_add]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   704
qed "complex_cnj_add";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   705
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   706
Goalw [complex_diff_def] "cnj(w - z) = cnj(w) - cnj(z)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   707
by (simp_tac (simpset() addsimps [complex_cnj_add,complex_cnj_minus]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   708
qed "complex_cnj_diff";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   709
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   710
Goal "cnj(w * z) = cnj(w) * cnj(z)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   711
by (res_inst_tac [("z","w")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   712
by (res_inst_tac [("z","z")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   713
by (asm_simp_tac (simpset() addsimps [complex_cnj,complex_mult]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   714
qed "complex_cnj_mult";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   715
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   716
Goalw [complex_divide_def] "cnj(w / z) = (cnj w)/(cnj z)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   717
by (simp_tac (simpset() addsimps [complex_cnj_mult,complex_cnj_inverse]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   718
qed "complex_cnj_divide";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   719
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   720
Goalw [cnj_def,complex_one_def] "cnj 1 = 1";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   721
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   722
qed "complex_cnj_one";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   723
Addsimps [complex_cnj_one];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   724
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   725
Goal "cnj(z ^ n) = cnj(z) ^ n";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   726
by (induct_tac "n" 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   727
by (auto_tac (claset(),simpset() addsimps [complex_cnj_mult]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   728
qed "complex_cnj_pow";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   729
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   730
Goal "z + cnj z = complex_of_real (2 * Re(z))";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   731
by (res_inst_tac [("z","z")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   732
by (asm_simp_tac (simpset() addsimps [complex_add,complex_cnj,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   733
    complex_of_real_def]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   734
qed "complex_add_cnj";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   735
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   736
Goal "z - cnj z = complex_of_real (2 * Im(z)) * ii";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   737
by (res_inst_tac [("z","z")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   738
by (asm_simp_tac (simpset() addsimps [complex_add,complex_cnj,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   739
    complex_of_real_def,complex_diff_def,complex_minus,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   740
    i_def,complex_mult]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   741
qed "complex_diff_cnj";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   742
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   743
goalw Complex.thy  [cnj_def,complex_zero_def] 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   744
      "cnj 0 = 0";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   745
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   746
qed "complex_cnj_zero";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   747
Addsimps [complex_cnj_zero];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   748
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   749
goal Complex.thy "(cnj z = 0) = (z = 0)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   750
by (res_inst_tac [("z","z")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   751
by (auto_tac (claset(),simpset() addsimps [complex_zero_def,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   752
    complex_cnj]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   753
qed "complex_cnj_zero_iff";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   754
AddIffs [complex_cnj_zero_iff];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   755
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   756
Goal "z * cnj z = complex_of_real (Re(z) ^ 2 + Im(z) ^ 2)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   757
by (res_inst_tac [("z","z")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   758
by (auto_tac (claset(),simpset() addsimps [complex_cnj,complex_mult,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   759
    complex_of_real_def,realpow_num_two]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   760
qed "complex_mult_cnj";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   761
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   762
(*---------------------------------------------------------------------------*)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   763
(*                              algebra                                      *)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   764
(*---------------------------------------------------------------------------*)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   765
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   766
Goal "(x*y = (0::complex)) = (x = 0 | y = 0)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   767
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   768
by (auto_tac (claset() addIs [ccontr] addDs 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   769
    [complex_mult_not_zero],simpset()));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   770
qed "complex_mult_zero_iff";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   771
AddIffs [complex_mult_zero_iff];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   772
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   773
Goalw [complex_zero_def] "(x + y = x) = (y = (0::complex))";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   774
by (res_inst_tac [("z","x")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   775
by (res_inst_tac [("z","y")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   776
by (auto_tac (claset(),simpset() addsimps [complex_add]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   777
qed "complex_add_left_cancel_zero";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   778
Addsimps [complex_add_left_cancel_zero];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   779
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   780
Goalw [complex_diff_def] 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   781
      "((z1::complex) - z2) * w = (z1 * w) - (z2 * w)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   782
by (simp_tac (simpset() addsimps [complex_add_mult_distrib]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   783
qed "complex_diff_mult_distrib";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   784
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   785
Goalw [complex_diff_def]
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   786
      "(w::complex) * (z1 - z2) = (w * z1) - (w * z2)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   787
by (simp_tac (simpset() addsimps [complex_add_mult_distrib2]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   788
qed "complex_diff_mult_distrib2";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   789
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   790
(*---------------------------------------------------------------------------*)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   791
(*                               modulus                                     *)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   792
(*---------------------------------------------------------------------------*)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   793
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   794
(*
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   795
Goal "[| sqrt(x) = 0; 0 <= x |] ==> x = 0";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   796
by (auto_tac (claset() addIs [real_sqrt_eq_zero_cancel],
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   797
    simpset()));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   798
qed "real_sqrt_eq_zero_cancel2";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   799
*)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   800
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   801
Goal "(cmod x = 0) = (x = 0)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   802
by (res_inst_tac [("z","x")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   803
by (auto_tac (claset() addIs
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   804
    [real_sum_squares_cancel,real_sum_squares_cancel2],
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   805
    simpset() addsimps [complex_mod,complex_zero_def,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   806
    realpow_num_two]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   807
qed "complex_mod_eq_zero_cancel";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   808
Addsimps [complex_mod_eq_zero_cancel];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   809
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   810
Goal "cmod (complex_of_real(real (n::nat))) = real n";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   811
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   812
qed "complex_mod_complex_of_real_of_nat";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   813
Addsimps [complex_mod_complex_of_real_of_nat];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   814
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   815
Goal "cmod (-x) = cmod(x)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   816
by (res_inst_tac [("z","x")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   817
by (asm_simp_tac (simpset() addsimps [complex_mod,complex_minus,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   818
    realpow_num_two]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   819
qed "complex_mod_minus";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   820
Addsimps [complex_mod_minus];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   821
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   822
Goal "cmod(z * cnj(z)) = cmod(z) ^ 2";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   823
by (res_inst_tac [("z","z")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   824
by (asm_simp_tac (simpset() addsimps [complex_mod,complex_cnj,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   825
    complex_mult, CLAIM "0 ^ 2 = (0::real)"]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   826
by (simp_tac (simpset() addsimps [realpow_two_eq_mult]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   827
qed "complex_mod_mult_cnj";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   828
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   829
Goalw [cmod_def] "cmod(Abs_complex(x,y)) ^ 2 = x ^ 2 + y ^ 2";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   830
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   831
qed "complex_mod_squared";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   832
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   833
Goalw [cmod_def]  "0 <= cmod x";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   834
by (auto_tac (claset() addIs [real_sqrt_ge_zero],simpset()));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   835
qed "complex_mod_ge_zero";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   836
Addsimps [complex_mod_ge_zero];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   837
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   838
Goal "abs(cmod x) = cmod x";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   839
by (auto_tac (claset() addIs [abs_eqI1],simpset()));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   840
qed "abs_cmod_cancel";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   841
Addsimps [abs_cmod_cancel];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   842
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   843
Goal "cmod(x*y) = cmod(x) * cmod(y)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   844
by (res_inst_tac [("z","x")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   845
by (res_inst_tac [("z","y")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   846
by (auto_tac (claset(),simpset() addsimps [complex_mult,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   847
    complex_mod,real_sqrt_mult_distrib2 RS sym] delsimps [realpow_Suc]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   848
by (res_inst_tac [("n","1")] realpow_Suc_cancel_eq 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   849
by (auto_tac (claset(),simpset() addsimps [realpow_num_two RS sym] 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   850
    delsimps [realpow_Suc]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   851
by (auto_tac (claset(),simpset() addsimps [real_diff_def,realpow_num_two,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   852
    real_add_mult_distrib2,real_add_mult_distrib] @ real_add_ac @ 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   853
    real_mult_ac));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   854
qed "complex_mod_mult";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   855
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   856
Goal "cmod(x + y) ^ 2 = cmod(x) ^ 2 + cmod(y) ^ 2 + 2 * Re(x * cnj y)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   857
by (res_inst_tac [("z","x")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   858
by (res_inst_tac [("z","y")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   859
by (auto_tac (claset(),simpset() addsimps [complex_add,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   860
    complex_mod_squared,complex_mult,complex_cnj,real_diff_def] 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   861
    delsimps [realpow_Suc]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   862
by (auto_tac (claset(),simpset() addsimps [real_add_mult_distrib2,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   863
    real_add_mult_distrib,realpow_num_two] @ real_mult_ac @ real_add_ac));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   864
qed "complex_mod_add_squared_eq";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   865
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   866
Goal "Re(x * cnj y) <= cmod(x * cnj y)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   867
by (res_inst_tac [("z","x")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   868
by (res_inst_tac [("z","y")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   869
by (auto_tac (claset(),simpset() addsimps [complex_mod,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   870
    complex_mult,complex_cnj,real_diff_def] delsimps [realpow_Suc]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   871
qed "complex_Re_mult_cnj_le_cmod";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   872
Addsimps [complex_Re_mult_cnj_le_cmod];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   873
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   874
Goal "Re(x * cnj y) <= cmod(x * y)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   875
by (cut_inst_tac [("x","x"),("y","y")] complex_Re_mult_cnj_le_cmod 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   876
by (asm_full_simp_tac (simpset() addsimps [complex_mod_mult]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   877
qed "complex_Re_mult_cnj_le_cmod2";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   878
Addsimps [complex_Re_mult_cnj_le_cmod2];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   879
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   880
Goal "((x::real) + y) ^ 2 = x ^ 2 + y ^ 2 + 2 * x * y";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   881
by (simp_tac (simpset() addsimps [real_add_mult_distrib,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   882
    real_add_mult_distrib2,realpow_num_two]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   883
qed "real_sum_squared_expand";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   884
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   885
Goal "cmod (x + y) ^ 2 <= (cmod(x) + cmod(y)) ^ 2";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   886
by (simp_tac (simpset() addsimps [real_sum_squared_expand,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   887
    complex_mod_add_squared_eq,real_mult_assoc,complex_mod_mult RS sym]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   888
qed "complex_mod_triangle_squared";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   889
Addsimps [complex_mod_triangle_squared];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   890
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   891
Goal "- cmod x <= cmod x";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   892
by (rtac (complex_mod_ge_zero RSN (2,real_le_trans)) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   893
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   894
qed "complex_mod_minus_le_complex_mod";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   895
Addsimps [complex_mod_minus_le_complex_mod];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   896
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   897
Goal "cmod (x + y) <= cmod(x) + cmod(y)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   898
by (res_inst_tac [("n","1")] realpow_increasing 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   899
by (auto_tac (claset() addIs [(complex_mod_ge_zero RSN (2,real_le_trans))],
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   900
    simpset() addsimps [realpow_num_two RS sym]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   901
qed "complex_mod_triangle_ineq";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   902
Addsimps [complex_mod_triangle_ineq];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   903
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   904
Goal "cmod(b + a) - cmod b <= cmod a";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   905
by (cut_inst_tac [("x1","b"),("y1","a"),("z","-cmod b")]
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   906
   (complex_mod_triangle_ineq RS real_add_le_mono1) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   907
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   908
qed "complex_mod_triangle_ineq2";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   909
Addsimps [complex_mod_triangle_ineq2];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   910
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   911
Goal "cmod (x - y) = cmod (y - x)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   912
by (res_inst_tac [("z","x")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   913
by (res_inst_tac [("z","y")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   914
by (auto_tac (claset(),simpset() addsimps [complex_diff,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   915
    complex_mod,real_diff_mult_distrib2,realpow_num_two,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   916
    real_diff_mult_distrib] @ real_add_ac @ real_mult_ac));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   917
qed "complex_mod_diff_commute";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   918
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   919
Goal "[| cmod x < r; cmod y < s |] ==> cmod (x + y) < r + s";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   920
by (auto_tac (claset() addIs [order_le_less_trans,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   921
    complex_mod_triangle_ineq],simpset()));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   922
qed "complex_mod_add_less";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   923
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   924
Goal "[| cmod x < r; cmod y < s |] ==> cmod (x * y) < r * s";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   925
by (auto_tac (claset() addIs [real_mult_less_mono'],simpset()     
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   926
    addsimps [complex_mod_mult]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   927
qed "complex_mod_mult_less";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   928
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   929
goal Complex.thy "cmod(a) - cmod(b) <= cmod(a + b)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   930
by (res_inst_tac [("R1.0","cmod(a)"),("R2.0","cmod(b)")]
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   931
    real_linear_less2 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   932
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   933
by (dtac (ARITH_PROVE "a < b ==> a - (b::real) < 0") 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   934
by (rtac real_le_trans 1 THEN rtac order_less_imp_le 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   935
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   936
by (dtac (ARITH_PROVE "a < b ==> 0 < (b::real) - a") 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   937
by (rtac (ARITH_PROVE "a  <= b + c ==> a - c <= (b::real)") 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   938
by (rtac (complex_mod_minus RS subst) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   939
by (rtac real_le_trans 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   940
by (rtac complex_mod_triangle_ineq 2);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   941
by (auto_tac (claset(),simpset() addsimps complex_add_ac));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   942
qed "complex_mod_diff_ineq";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   943
Addsimps [complex_mod_diff_ineq];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   944
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   945
Goal "Re z <= cmod z";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   946
by (res_inst_tac [("z","z")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   947
by (auto_tac (claset(),simpset() addsimps [complex_mod]
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   948
    delsimps [realpow_Suc]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   949
qed "complex_Re_le_cmod";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   950
Addsimps [complex_Re_le_cmod];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   951
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   952
Goal "z ~= 0 ==> 0 < cmod z";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   953
by (cut_inst_tac [("x","z")] complex_mod_ge_zero 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   954
by (dtac order_le_imp_less_or_eq 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   955
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   956
qed "complex_mod_gt_zero";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   957
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   958
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   959
(*---------------------------------------------------------------------------*)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   960
(*                       a few more theorems                                 *)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   961
(*---------------------------------------------------------------------------*)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   962
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   963
Goal "cmod(x ^ n) = cmod(x) ^ n";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   964
by (induct_tac "n" 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   965
by (auto_tac (claset(),simpset() addsimps [complex_mod_mult]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   966
qed "complex_mod_complexpow";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   967
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   968
Goal "(-x::complex) ^ n = (if even n then (x ^ n) else -(x ^ n))";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   969
by (induct_tac "n" 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   970
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   971
qed "complexpow_minus";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   972
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   973
Goal "inverse (-x) = - inverse (x::complex)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   974
by (res_inst_tac [("z","x")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   975
by (asm_simp_tac (simpset() addsimps [complex_inverse,complex_minus,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   976
    realpow_num_two]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   977
qed "complex_inverse_minus";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   978
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   979
Goalw [complex_divide_def] "x / (1::complex) = x";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   980
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   981
qed "complex_divide_one";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   982
Addsimps [complex_divide_one];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   983
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   984
Goal "cmod(inverse x) = inverse(cmod x)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   985
by (complex_div_undefined_case_tac "x=0" 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   986
by (res_inst_tac [("c1","cmod x")] (real_mult_left_cancel RS iffD1) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   987
by (auto_tac (claset(),simpset() addsimps [complex_mod_mult RS sym]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   988
qed "complex_mod_inverse";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   989
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   990
Goalw [complex_divide_def,real_divide_def]
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   991
      "cmod(x/y) = cmod(x)/(cmod y)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   992
by (auto_tac (claset(),simpset() addsimps [complex_mod_mult,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   993
    complex_mod_inverse]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   994
qed "complex_mod_divide";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   995
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   996
Goalw [complex_divide_def]  
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   997
      "inverse(x/y) = y/(x::complex)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   998
by (auto_tac (claset(),simpset() addsimps [complex_inverse_distrib,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   999
    complex_mult_commute]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1000
qed "complex_inverse_divide";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1001
Addsimps [complex_inverse_divide];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1002
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1003
Goal "((r::complex) * s) ^ n = (r ^ n) * (s ^ n)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1004
by (induct_tac "n" 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1005
by (auto_tac (claset(),simpset() addsimps complex_mult_ac));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1006
qed "complexpow_mult";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1007
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1008
(*---------------------------------------------------------------------------*)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1009
(*                       More exponentiation                                 *)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1010
(*---------------------------------------------------------------------------*)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1011
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1012
Goal "(0::complex) ^ (Suc n) = 0";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1013
by (Auto_tac);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1014
qed "complexpow_zero";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1015
Addsimps [complexpow_zero];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1016
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1017
Goal "r ~= (0::complex) --> r ^ n ~= 0";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1018
by (induct_tac "n" 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1019
by (auto_tac (claset(),simpset() addsimps [complex_mult_not_zero]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1020
qed_spec_mp "complexpow_not_zero";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1021
Addsimps [complexpow_not_zero];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1022
AddIs [complexpow_not_zero];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1023
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1024
Goal "r ^ n = (0::complex) ==> r = 0";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1025
by (blast_tac (claset() addIs [ccontr] 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1026
    addDs [complexpow_not_zero]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1027
qed "complexpow_zero_zero";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1028
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1029
Goalw [i_def] "ii ^ 2 = -(1::complex)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1030
by (auto_tac (claset(),simpset() addsimps 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1031
    [complex_mult,complex_one_def,complex_minus,realpow_num_two]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1032
qed "complexpow_i_squared";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1033
Addsimps [complexpow_i_squared];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1034
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1035
Goalw [i_def,complex_zero_def] "ii ~= 0";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1036
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1037
qed "complex_i_not_zero";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1038
Addsimps [complex_i_not_zero];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1039
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1040
Goal "x * y ~= (0::complex) ==> x ~= 0";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1041
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1042
qed "complex_mult_eq_zero_cancel1";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1043
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1044
Goal "x * y ~= 0 ==> y ~= (0::complex)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1045
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1046
qed "complex_mult_eq_zero_cancel2";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1047
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1048
Goal "(x * y ~= 0) = (x ~= 0 & y ~= (0::complex))";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1049
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1050
qed "complex_mult_not_eq_zero_iff";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1051
AddIffs [complex_mult_not_eq_zero_iff];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1052
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1053
Goal "inverse ((r::complex) ^ n) = (inverse r) ^ n";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1054
by (induct_tac "n" 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1055
by (auto_tac (claset(), simpset() addsimps [complex_inverse_distrib]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1056
qed "complexpow_inverse";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1057
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1058
(*---------------------------------------------------------------------------*)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1059
(* sgn                                                                       *)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1060
(*---------------------------------------------------------------------------*)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1061
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1062
Goalw [sgn_def] "sgn 0 = 0";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1063
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1064
qed "sgn_zero";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1065
Addsimps[sgn_zero];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1066
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1067
Goalw [sgn_def] "sgn 1 = 1";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1068
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1069
qed "sgn_one";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1070
Addsimps [sgn_one];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1071
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1072
Goalw [sgn_def] "sgn (-z) = - sgn(z)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1073
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1074
qed "sgn_minus";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1075
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1076
Goalw [sgn_def] 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1077
    "sgn z = z / complex_of_real (cmod z)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1078
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1079
qed "sgn_eq";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1080
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1081
Goal "EX x y. z = complex_of_real(x) + ii * complex_of_real(y)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1082
by (res_inst_tac [("z","z")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1083
by (auto_tac (claset(),simpset() addsimps [complex_of_real_def,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1084
    i_def,complex_mult,complex_add]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1085
qed "complex_split";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1086
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1087
Goal "Re(complex_of_real(x) + ii * complex_of_real(y)) = x";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1088
by (auto_tac (claset(),simpset() addsimps [complex_of_real_def,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1089
    i_def,complex_mult,complex_add]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1090
qed "Re_complex_i";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1091
Addsimps [Re_complex_i];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1092
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1093
Goal "Im(complex_of_real(x) + ii * complex_of_real(y)) = y";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1094
by (auto_tac (claset(),simpset() addsimps [complex_of_real_def,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1095
    i_def,complex_mult,complex_add]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1096
qed "Im_complex_i";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1097
Addsimps [Im_complex_i];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1098
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1099
Goalw [i_def,complex_of_real_def] "ii * ii = complex_of_real (-1)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1100
by (auto_tac (claset(),simpset() addsimps [complex_mult,complex_add]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1101
qed "i_mult_eq";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1102
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1103
Goalw [i_def,complex_one_def] "ii * ii = -(1::complex)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1104
by (simp_tac (simpset() addsimps [complex_mult,complex_minus]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1105
qed "i_mult_eq2";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1106
Addsimps [i_mult_eq2];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1107
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1108
Goal "cmod (complex_of_real(x) + ii * complex_of_real(y)) = \
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1109
\     sqrt (x ^ 2 + y ^ 2)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1110
by (auto_tac (claset(),simpset() addsimps [complex_mult,complex_add,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1111
    i_def,complex_of_real_def,cmod_def]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1112
qed "cmod_i";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1113
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1114
Goalw [complex_of_real_def,i_def] 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1115
     "complex_of_real xa + ii * complex_of_real ya = \
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1116
\     complex_of_real xb + ii * complex_of_real yb \
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1117
\      ==> xa = xb";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1118
by (auto_tac (claset(),simpset() addsimps [complex_mult,complex_add]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1119
qed "complex_eq_Re_eq";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1120
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1121
Goalw [complex_of_real_def,i_def] 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1122
     "complex_of_real xa + ii * complex_of_real ya = \
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1123
\     complex_of_real xb + ii * complex_of_real yb \
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1124
\      ==> ya = yb";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1125
by (auto_tac (claset(),simpset() addsimps [complex_mult,complex_add]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1126
qed "complex_eq_Im_eq";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1127
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1128
Goal "(complex_of_real xa + ii * complex_of_real ya = \
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1129
\      complex_of_real xb + ii * complex_of_real yb) = ((xa = xb) & (ya = yb))";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1130
by (auto_tac (claset() addIs [complex_eq_Im_eq,complex_eq_Re_eq],simpset()));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1131
qed "complex_eq_cancel_iff";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1132
AddIffs [complex_eq_cancel_iff];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1133
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1134
Goal "(complex_of_real xa + complex_of_real ya * ii = \
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1135
\      complex_of_real xb + complex_of_real yb * ii ) = ((xa = xb) & (ya = yb))";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1136
by (auto_tac (claset(),simpset() addsimps [complex_mult_commute]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1137
qed "complex_eq_cancel_iffA";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1138
AddIffs [complex_eq_cancel_iffA];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1139
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1140
Goal "(complex_of_real xa + complex_of_real ya * ii = \
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1141
\      complex_of_real xb + ii * complex_of_real yb) = ((xa = xb) & (ya = yb))";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1142
by (auto_tac (claset(),simpset() addsimps [complex_mult_commute]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1143
qed "complex_eq_cancel_iffB";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1144
AddIffs [complex_eq_cancel_iffB];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1145
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1146
Goal "(complex_of_real xa + ii * complex_of_real ya  = \
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1147
\      complex_of_real xb + complex_of_real yb * ii) = ((xa = xb) & (ya = yb))";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1148
by (auto_tac (claset(),simpset() addsimps [complex_mult_commute]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1149
qed "complex_eq_cancel_iffC";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1150
AddIffs [complex_eq_cancel_iffC];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1151
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1152
Goal"(complex_of_real x + ii * complex_of_real y = \
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1153
\     complex_of_real xa) = (x = xa & y = 0)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1154
by (cut_inst_tac [("xa","x"),("ya","y"),("xb","xa"),("yb","0")]  
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1155
    complex_eq_cancel_iff 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1156
by (asm_full_simp_tac (simpset() delsimps [complex_eq_cancel_iff]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1157
qed "complex_eq_cancel_iff2";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1158
Addsimps [complex_eq_cancel_iff2];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1159
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1160
Goal"(complex_of_real x + complex_of_real y * ii = \
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1161
\     complex_of_real xa) = (x = xa & y = 0)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1162
by (auto_tac (claset(),simpset() addsimps [complex_mult_commute]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1163
qed "complex_eq_cancel_iff2a";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1164
Addsimps [complex_eq_cancel_iff2a];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1165
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1166
Goal "(complex_of_real x + ii * complex_of_real y = \
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1167
\     ii * complex_of_real ya) = (x = 0 & y = ya)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1168
by (cut_inst_tac [("xa","x"),("ya","y"),("xb","0"),("yb","ya")]  
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1169
    complex_eq_cancel_iff 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1170
by (asm_full_simp_tac (simpset() delsimps [complex_eq_cancel_iff]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1171
qed "complex_eq_cancel_iff3";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1172
Addsimps [complex_eq_cancel_iff3];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1173
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1174
Goal "(complex_of_real x + complex_of_real y * ii = \
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1175
\     ii * complex_of_real ya) = (x = 0 & y = ya)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1176
by (auto_tac (claset(),simpset() addsimps [complex_mult_commute]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1177
qed "complex_eq_cancel_iff3a";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1178
Addsimps [complex_eq_cancel_iff3a];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1179
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1180
Goalw [complex_of_real_def,i_def,complex_zero_def] 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1181
     "complex_of_real x + ii * complex_of_real y = 0 \
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1182
\     ==> x = 0";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1183
by (auto_tac (claset(),simpset() addsimps [complex_mult,complex_add]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1184
qed "complex_split_Re_zero";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1185
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1186
Goalw [complex_of_real_def,i_def,complex_zero_def] 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1187
     "complex_of_real x + ii * complex_of_real y = 0 \
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1188
\     ==> y = 0";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1189
by (auto_tac (claset(),simpset() addsimps [complex_mult,complex_add]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1190
qed "complex_split_Im_zero";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1191
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1192
Goalw [sgn_def,complex_divide_def] 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1193
      "Re(sgn z) = Re(z)/cmod z";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1194
by (res_inst_tac [("z","z")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1195
by (auto_tac (claset(),simpset() addsimps [complex_of_real_inverse RS sym]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1196
by (auto_tac (claset(),simpset() addsimps [complex_of_real_def,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1197
    complex_mult,real_divide_def]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1198
qed "Re_sgn";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1199
Addsimps [Re_sgn];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1200
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1201
Goalw [sgn_def,complex_divide_def] 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1202
      "Im(sgn z) = Im(z)/cmod z";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1203
by (res_inst_tac [("z","z")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1204
by (auto_tac (claset(),simpset() addsimps [complex_of_real_inverse RS sym]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1205
by (auto_tac (claset(),simpset() addsimps [complex_of_real_def,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1206
    complex_mult,real_divide_def]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1207
qed "Im_sgn";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1208
Addsimps [Im_sgn];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1209
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1210
Goalw [complex_of_real_def,i_def] 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1211
     "inverse(complex_of_real x + ii * complex_of_real y) = \
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1212
\     complex_of_real(x/(x ^ 2 + y ^ 2)) - \
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1213
\     ii * complex_of_real(y/(x ^ 2 + y ^ 2))";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1214
by (auto_tac (claset(),simpset() addsimps [complex_mult,complex_add,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1215
    complex_diff_def,complex_minus,complex_inverse,real_divide_def]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1216
qed "complex_inverse_complex_split";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1217
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1218
(*----------------------------------------------------------------------------*)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1219
(* Many of the theorems below need to be moved elsewhere e.g. Transc.ML. Also *)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1220
(* many of the theorems are not used - so should they be kept?                *)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1221
(*----------------------------------------------------------------------------*)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1222
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1223
Goalw [i_def,complex_of_real_def]
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1224
    "Re (ii * complex_of_real y) = 0";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1225
by (auto_tac (claset(),simpset() addsimps [complex_mult]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1226
qed "Re_mult_i_eq";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1227
Addsimps [Re_mult_i_eq];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1228
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1229
Goalw [i_def,complex_of_real_def]
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1230
    "Im (ii * complex_of_real y) = y";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1231
by (auto_tac (claset(),simpset() addsimps [complex_mult]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1232
qed "Im_mult_i_eq";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1233
Addsimps [Im_mult_i_eq];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1234
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1235
Goalw [i_def,complex_of_real_def]
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1236
    "cmod (ii * complex_of_real y) = abs y";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1237
by (auto_tac (claset(),simpset() addsimps [complex_mult,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1238
    complex_mod,realpow_num_two]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1239
qed "complex_mod_mult_i";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1240
Addsimps [complex_mod_mult_i];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1241
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1242
Goalw [arg_def] 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1243
   "0 < y ==> cos (arg(ii * complex_of_real y)) = 0";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1244
by (auto_tac (claset(),simpset() addsimps [abs_eqI2]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1245
by (res_inst_tac [("a","pi/2")] someI2 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1246
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1247
by (res_inst_tac [("R2.0","0")] real_less_trans 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1248
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1249
qed "cos_arg_i_mult_zero";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1250
Addsimps [cos_arg_i_mult_zero];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1251
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1252
Goalw [arg_def] 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1253
   "y < 0 ==> cos (arg(ii * complex_of_real y)) = 0";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1254
by (auto_tac (claset(),simpset() addsimps [abs_minus_eqI2]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1255
by (res_inst_tac [("a","- pi/2")] someI2 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1256
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1257
by (res_inst_tac [("j","0")] real_le_trans 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1258
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1259
qed "cos_arg_i_mult_zero2";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1260
Addsimps [cos_arg_i_mult_zero2];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1261
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1262
Goalw [complex_zero_def,complex_of_real_def] 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1263
      "(complex_of_real y ~= 0) = (y ~= 0)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1264
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1265
qed "complex_of_real_not_zero_iff";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1266
Addsimps [complex_of_real_not_zero_iff];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1267
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1268
Goal "(complex_of_real y = 0) = (y = 0)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1269
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1270
by (rtac ccontr 1 THEN dtac (complex_of_real_not_zero_iff RS iffD2) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1271
by (Asm_full_simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1272
qed "complex_of_real_zero_iff";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1273
Addsimps [complex_of_real_zero_iff];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1274
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1275
Goal "y ~= 0 ==> cos (arg(ii * complex_of_real y)) = 0";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1276
by (cut_inst_tac [("R1.0","y"),("R2.0","0")] real_linear 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1277
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1278
qed "cos_arg_i_mult_zero3";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1279
Addsimps [cos_arg_i_mult_zero3];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1280
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1281
(*---------------------------------------------------------------------------*)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1282
(* Finally! Polar form for complex numbers                                   *) 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1283
(*---------------------------------------------------------------------------*)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1284
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1285
Goal "EX r a. z = complex_of_real r * \
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1286
\     (complex_of_real(cos a) + ii * complex_of_real(sin a))";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1287
by (cut_inst_tac [("z","z")] complex_split 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1288
by (auto_tac (claset(),simpset() addsimps [polar_Ex,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1289
    complex_add_mult_distrib2,complex_of_real_mult] @ complex_mult_ac));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1290
qed "complex_split_polar";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1291
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1292
Goalw [rcis_def,cis_def] "EX r a. z = rcis r a";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1293
by (rtac complex_split_polar 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1294
qed "rcis_Ex";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1295
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1296
Goal "Re(complex_of_real r * \
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1297
\     (complex_of_real(cos a) + ii * complex_of_real(sin a))) = r * cos a";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1298
by (auto_tac (claset(),simpset() addsimps [complex_add_mult_distrib2,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1299
    complex_of_real_mult] @ complex_mult_ac));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1300
qed "Re_complex_polar";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1301
Addsimps [Re_complex_polar];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1302
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1303
Goalw [rcis_def,cis_def] "Re(rcis r a) = r * cos a";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1304
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1305
qed "Re_rcis";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1306
Addsimps [Re_rcis];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1307
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1308
Goal "Im(complex_of_real r * \
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1309
\     (complex_of_real(cos a) + ii * complex_of_real(sin a))) = r * sin a";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1310
by (auto_tac (claset(),simpset() addsimps [complex_add_mult_distrib2,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1311
    complex_of_real_mult] @ complex_mult_ac));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1312
qed "Im_complex_polar";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1313
Addsimps [Im_complex_polar];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1314
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1315
Goalw [rcis_def,cis_def] "Im(rcis r a) = r * sin a";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1316
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1317
qed "Im_rcis";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1318
Addsimps [Im_rcis];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1319
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1320
Goal "cmod (complex_of_real r * \
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1321
\     (complex_of_real(cos a) + ii * complex_of_real(sin a))) = abs r";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1322
by (auto_tac (claset(),simpset() addsimps [complex_add_mult_distrib2,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1323
    cmod_i,complex_of_real_mult,real_add_mult_distrib2
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1324
    RS sym,realpow_mult]  @ complex_mult_ac@ real_mult_ac 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1325
    delsimps [realpow_Suc]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1326
qed "complex_mod_complex_polar";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1327
Addsimps [complex_mod_complex_polar];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1328
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1329
Goalw [rcis_def,cis_def] "cmod(rcis r a) = abs r";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1330
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1331
qed "complex_mod_rcis";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1332
Addsimps [complex_mod_rcis];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1333
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1334
Goalw [cmod_def] "cmod z = sqrt (Re (z * cnj z))";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1335
by (rtac (real_sqrt_eq_iff RS iffD2) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1336
by (auto_tac (claset(),simpset() addsimps [complex_mult_cnj]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1337
qed "complex_mod_sqrt_Re_mult_cnj";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1338
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1339
Goal "Re(cnj z) = Re z";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1340
by (res_inst_tac [("z","z")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1341
by (auto_tac (claset(),simpset() addsimps [complex_cnj]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1342
qed "complex_Re_cnj";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1343
Addsimps [complex_Re_cnj];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1344
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1345
Goal "Im(cnj z) = - Im z";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1346
by (res_inst_tac [("z","z")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1347
by (auto_tac (claset(),simpset() addsimps [complex_cnj]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1348
qed "complex_Im_cnj";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1349
Addsimps [complex_Im_cnj];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1350
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1351
Goal "Im (z * cnj z) = 0";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1352
by (res_inst_tac [("z","z")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1353
by (auto_tac (claset(),simpset() addsimps [complex_cnj,complex_mult]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1354
qed "complex_In_mult_cnj_zero";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1355
Addsimps [complex_In_mult_cnj_zero];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1356
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1357
Goal "[| Im w = 0; Im z = 0 |] ==> Re(w * z) = Re(w) * Re(z)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1358
by (res_inst_tac [("z","z")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1359
by (res_inst_tac [("z","w")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1360
by (auto_tac (claset(),simpset() addsimps [complex_mult]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1361
qed "complex_Re_mult";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1362
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1363
Goalw [complex_of_real_def] "Re (z * complex_of_real c) = Re(z) * c";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1364
by (res_inst_tac [("z","z")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1365
by (auto_tac (claset(),simpset() addsimps [complex_mult]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1366
qed "complex_Re_mult_complex_of_real";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1367
Addsimps [complex_Re_mult_complex_of_real];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1368
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1369
Goalw [complex_of_real_def] "Im (z * complex_of_real c) = Im(z) * c";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1370
by (res_inst_tac [("z","z")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1371
by (auto_tac (claset(),simpset() addsimps [complex_mult]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1372
qed "complex_Im_mult_complex_of_real";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1373
Addsimps [complex_Im_mult_complex_of_real];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1374
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1375
Goalw [complex_of_real_def] "Re (complex_of_real c * z) = c * Re(z)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1376
by (res_inst_tac [("z","z")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1377
by (auto_tac (claset(),simpset() addsimps [complex_mult]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1378
qed "complex_Re_mult_complex_of_real2";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1379
Addsimps [complex_Re_mult_complex_of_real2];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1380
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1381
Goalw [complex_of_real_def] "Im (complex_of_real c * z) = c * Im(z)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1382
by (res_inst_tac [("z","z")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1383
by (auto_tac (claset(),simpset() addsimps [complex_mult]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1384
qed "complex_Im_mult_complex_of_real2";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1385
Addsimps [complex_Im_mult_complex_of_real2];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1386
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1387
(*---------------------------------------------------------------------------*)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1388
(*  (r1 * cis a) * (r2 * cis b) = r1 * r2 * cis (a + b)                      *) 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1389
(*---------------------------------------------------------------------------*)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1390
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1391
Goalw [rcis_def] "cis a = rcis 1 a";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1392
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1393
qed "cis_rcis_eq";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1394
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1395
Goalw [rcis_def,cis_def] 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1396
  "rcis r1 a * rcis r2 b = rcis (r1*r2) (a + b)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1397
by (auto_tac (claset(),simpset() addsimps [cos_add,sin_add,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1398
    complex_add_mult_distrib2,complex_add_mult_distrib]
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1399
     @ complex_mult_ac @ complex_add_ac));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1400
by (auto_tac (claset(),simpset() addsimps [complex_add_mult_distrib2 RS sym,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1401
    complex_mult_assoc RS sym,complex_of_real_mult,complex_of_real_add,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1402
    complex_add_assoc RS sym,i_mult_eq] delsimps [i_mult_eq2]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1403
by (auto_tac (claset(),simpset() addsimps complex_add_ac));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1404
by (auto_tac (claset(),simpset() addsimps [complex_add_assoc RS sym,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1405
    complex_of_real_add,real_add_mult_distrib2,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1406
    real_diff_def] @ real_mult_ac @ real_add_ac));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1407
qed "rcis_mult";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1408
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1409
Goal "cis a * cis b = cis (a + b)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1410
by (simp_tac (simpset() addsimps [cis_rcis_eq,rcis_mult]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1411
qed "cis_mult";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1412
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1413
Goalw [cis_def] "cis 0 = 1";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1414
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1415
qed "cis_zero";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1416
Addsimps [cis_zero];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1417
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1418
Goalw [cis_def] "cis 0 = complex_of_real 1";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1419
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1420
qed "cis_zero2";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1421
Addsimps [cis_zero2];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1422
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1423
Goalw [rcis_def] "rcis 0 a = 0";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1424
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1425
qed "rcis_zero_mod";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1426
Addsimps [rcis_zero_mod];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1427
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1428
Goalw [rcis_def] "rcis r 0 = complex_of_real r";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1429
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1430
qed "rcis_zero_arg";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1431
Addsimps [rcis_zero_arg];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1432
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1433
Goalw [complex_of_real_def,complex_one_def] 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1434
   "complex_of_real (-(1::real)) = -(1::complex)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1435
by (simp_tac (simpset() addsimps [complex_minus]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1436
qed "complex_of_real_minus_one";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1437
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1438
Goal "ii * (ii * x) = - x";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1439
by (simp_tac (simpset() addsimps [complex_mult_assoc RS sym]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1440
qed "complex_i_mult_minus";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1441
Addsimps [complex_i_mult_minus];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1442
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1443
Goal "ii * ii * x = - x";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1444
by (Simp_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1445
qed "complex_i_mult_minus2";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1446
Addsimps [complex_i_mult_minus2];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1447
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1448
Goalw [cis_def] 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1449
   "cis (real (Suc n) * a) = cis a * cis (real n * a)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1450
by (auto_tac (claset(),simpset() addsimps [real_of_nat_Suc,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1451
    real_add_mult_distrib,cos_add,sin_add,complex_add_mult_distrib,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1452
    complex_add_mult_distrib2,complex_of_real_add,complex_of_real_mult] 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1453
    @ complex_mult_ac @ complex_add_ac));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1454
by (auto_tac (claset(),simpset() addsimps [complex_add_mult_distrib2 RS sym,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1455
    complex_mult_assoc RS sym,i_mult_eq,complex_of_real_mult,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1456
    complex_of_real_add,complex_add_assoc RS sym,complex_of_real_minus
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1457
    RS sym,real_diff_def] @ real_mult_ac delsimps [i_mult_eq2]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1458
qed "cis_real_of_nat_Suc_mult";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1459
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1460
Goal "(cis a) ^ n = cis (real n * a)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1461
by (induct_tac "n" 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1462
by (auto_tac (claset(),simpset() addsimps [cis_real_of_nat_Suc_mult]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1463
qed "DeMoivre";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1464
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1465
Goalw [rcis_def] 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1466
   "(rcis r a) ^ n = rcis (r ^ n) (real n * a)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1467
by (auto_tac (claset(),simpset() addsimps [complexpow_mult,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1468
    DeMoivre,complex_of_real_pow]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1469
qed "DeMoivre2";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1470
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1471
Goalw [cis_def] "inverse(cis a) = cis (-a)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1472
by (auto_tac (claset(),simpset() addsimps [complex_inverse_complex_split,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1473
    complex_of_real_minus,complex_diff_def]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1474
qed "cis_inverse";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1475
Addsimps [cis_inverse];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1476
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1477
Goal "inverse(rcis r a) = rcis (1/r) (-a)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1478
by (real_div_undefined_case_tac "r=0" 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1479
by (simp_tac (simpset() addsimps [rename_numerals DIVISION_BY_ZERO,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1480
    COMPLEX_INVERSE_ZERO]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1481
by (auto_tac (claset(),simpset() addsimps [complex_inverse_complex_split,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1482
    complex_add_mult_distrib2,complex_of_real_mult,rcis_def,cis_def,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1483
    realpow_num_two] @ complex_mult_ac @ real_mult_ac));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1484
by (auto_tac (claset(),simpset() addsimps [real_add_mult_distrib2 RS sym,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1485
    complex_of_real_minus,complex_diff_def]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1486
qed "rcis_inverse";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1487
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1488
Goalw [complex_divide_def] "cis a / cis b = cis (a - b)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1489
by (auto_tac (claset(),simpset() addsimps [cis_mult,real_diff_def]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1490
qed "cis_divide";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1491
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1492
Goalw [complex_divide_def]
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1493
 "rcis r1 a / rcis r2 b = rcis (r1/r2) (a - b)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1494
by (real_div_undefined_case_tac "r2=0" 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1495
by (simp_tac (simpset() addsimps [rename_numerals DIVISION_BY_ZERO,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1496
    COMPLEX_INVERSE_ZERO]) 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1497
by (auto_tac (claset(),simpset() addsimps [rcis_inverse,rcis_mult,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1498
    real_diff_def]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1499
qed "rcis_divide";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1500
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1501
Goalw [cis_def] "Re(cis a) = cos a";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1502
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1503
qed "Re_cis";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1504
Addsimps [Re_cis];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1505
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1506
Goalw [cis_def] "Im(cis a) = sin a";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1507
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1508
qed "Im_cis";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1509
Addsimps [Im_cis];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1510
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1511
Goal "cos (real n * a) = Re(cis a ^ n)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1512
by (auto_tac (claset(),simpset() addsimps [DeMoivre]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1513
qed "cos_n_Re_cis_pow_n";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1514
 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1515
Goal "sin (real n * a) = Im(cis a ^ n)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1516
by (auto_tac (claset(),simpset() addsimps [DeMoivre]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1517
qed "sin_n_Im_cis_pow_n";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1518
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1519
Goalw [expi_def,cis_def]
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1520
    "expi (ii * complex_of_real y) = \
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1521
\    complex_of_real (cos y) + ii * complex_of_real (sin y)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1522
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1523
qed "expi_Im_split";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1524
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1525
Goalw [expi_def]
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1526
    "expi (ii * complex_of_real y) = cis y";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1527
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1528
qed "expi_Im_cis";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1529
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1530
Goalw [expi_def] "expi(a + b) = expi(a) * expi(b)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1531
by (auto_tac (claset(),simpset() addsimps [complex_Re_add,exp_add,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1532
    complex_Im_add,cis_mult RS sym,complex_of_real_mult] @
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1533
    complex_mult_ac));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1534
qed "expi_add";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1535
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1536
Goalw [expi_def] 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1537
     "expi(complex_of_real x + ii * complex_of_real y) = \
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1538
\     complex_of_real (exp(x)) * cis y";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1539
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1540
qed "expi_complex_split";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1541
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1542
Goalw [expi_def] "expi (0::complex) = 1";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1543
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1544
qed "expi_zero";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1545
Addsimps [expi_zero];
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1546
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1547
goal Complex.thy 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1548
     "Re (w * z) = Re w * Re z - Im w * Im z";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1549
by (res_inst_tac [("z","z")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1550
by (res_inst_tac [("z","w")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1551
by (auto_tac (claset(),simpset() addsimps [complex_mult]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1552
qed "complex_Re_mult_eq";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1553
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1554
goal Complex.thy 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1555
     "Im (w * z) = Re w * Im z + Im w * Re z";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1556
by (res_inst_tac [("z","z")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1557
by (res_inst_tac [("z","w")] eq_Abs_complex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1558
by (auto_tac (claset(),simpset() addsimps [complex_mult]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1559
qed "complex_Im_mult_eq";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1560
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1561
goal Complex.thy 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1562
   "EX a r. z = complex_of_real r * expi a";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1563
by (cut_inst_tac [("z","z")] rcis_Ex 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1564
by (auto_tac (claset(),simpset() addsimps [expi_def,rcis_def,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1565
    complex_mult_assoc RS sym,complex_of_real_mult]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1566
by (res_inst_tac [("x","ii * complex_of_real a")] exI 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1567
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1568
qed "complex_expi_Ex";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1569
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1570
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1571
(****
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1572
Goal "[| - pi < a; a <= pi |] ==> (-pi < a & a <= 0) | (0 <= a & a <= pi)";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1573
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1574
qed "lemma_split_interval";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1575
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1576
Goalw [arg_def] 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1577
  "[| r ~= 0; - pi < a; a <= pi |] \
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1578
\  ==> arg(complex_of_real r * \
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1579
\      (complex_of_real(cos a) + ii * complex_of_real(sin a))) = a";
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1580
by Auto_tac;
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1581
by (cut_inst_tac [("R1.0","0"),("R2.0","r")] real_linear 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1582
by (auto_tac (claset(),simpset() addsimps (map (full_rename_numerals thy)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1583
    [rabs_eqI2,rabs_minus_eqI2,real_minus_rinv]) @ [real_divide_def,
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1584
    real_minus_mult_eq2 RS sym] @ real_mult_ac));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1585
by (auto_tac (claset(),simpset() addsimps [real_mult_assoc RS sym]));
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1586
by (dtac lemma_split_interval 1 THEN Step_tac 1);
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1587
****)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
  1588