diff --git a/src/HOL/Nonstandard_Analysis/NSComplex.thy b/src/HOL/Nonstandard_Analysis/NSComplex.thy --- a/src/HOL/Nonstandard_Analysis/NSComplex.thy +++ b/src/HOL/Nonstandard_Analysis/NSComplex.thy @@ -1,603 +1,603 @@ (* Title: HOL/Nonstandard_Analysis/NSComplex.thy Author: Jacques D. Fleuriot, University of Edinburgh Author: Lawrence C Paulson *) section \Nonstandard Complex Numbers\ theory NSComplex imports NSA begin type_synonym hcomplex = "complex star" abbreviation hcomplex_of_complex :: "complex \ complex star" where "hcomplex_of_complex \ star_of" abbreviation hcmod :: "complex star \ real star" where "hcmod \ hnorm" subsubsection \Real and Imaginary parts\ definition hRe :: "hcomplex \ hypreal" where "hRe = *f* Re" definition hIm :: "hcomplex \ hypreal" where "hIm = *f* Im" subsubsection \Imaginary unit\ definition iii :: hcomplex where "iii = star_of \" subsubsection \Complex conjugate\ definition hcnj :: "hcomplex \ hcomplex" where "hcnj = *f* cnj" subsubsection \Argand\ definition hsgn :: "hcomplex \ hcomplex" where "hsgn = *f* sgn" definition harg :: "hcomplex \ hypreal" - where "harg = *f* arg" + where "harg = *f* Arg" definition \ \abbreviation for \cos a + i sin a\\ hcis :: "hypreal \ hcomplex" where "hcis = *f* cis" subsubsection \Injection from hyperreals\ abbreviation hcomplex_of_hypreal :: "hypreal \ hcomplex" where "hcomplex_of_hypreal \ of_hypreal" definition \ \abbreviation for \r * (cos a + i sin a)\\ hrcis :: "hypreal \ hypreal \ hcomplex" where "hrcis = *f2* rcis" subsubsection \\e ^ (x + iy)\\ definition hExp :: "hcomplex \ hcomplex" where "hExp = *f* exp" definition HComplex :: "hypreal \ hypreal \ hcomplex" where "HComplex = *f2* Complex" lemmas hcomplex_defs [transfer_unfold] = hRe_def hIm_def iii_def hcnj_def hsgn_def harg_def hcis_def hrcis_def hExp_def HComplex_def lemma Standard_hRe [simp]: "x \ Standard \ hRe x \ Standard" by (simp add: hcomplex_defs) lemma Standard_hIm [simp]: "x \ Standard \ hIm x \ Standard" by (simp add: hcomplex_defs) lemma Standard_iii [simp]: "iii \ Standard" by (simp add: hcomplex_defs) lemma Standard_hcnj [simp]: "x \ Standard \ hcnj x \ Standard" by (simp add: hcomplex_defs) lemma Standard_hsgn [simp]: "x \ Standard \ hsgn x \ Standard" by (simp add: hcomplex_defs) lemma Standard_harg [simp]: "x \ Standard \ harg x \ Standard" by (simp add: hcomplex_defs) lemma Standard_hcis [simp]: "r \ Standard \ hcis r \ Standard" by (simp add: hcomplex_defs) lemma Standard_hExp [simp]: "x \ Standard \ hExp x \ Standard" by (simp add: hcomplex_defs) lemma Standard_hrcis [simp]: "r \ Standard \ s \ Standard \ hrcis r s \ Standard" by (simp add: hcomplex_defs) lemma Standard_HComplex [simp]: "r \ Standard \ s \ Standard \ HComplex r s \ Standard" by (simp add: hcomplex_defs) lemma hcmod_def: "hcmod = *f* cmod" by (rule hnorm_def) subsection \Properties of Nonstandard Real and Imaginary Parts\ lemma hcomplex_hRe_hIm_cancel_iff: "\w z. w = z \ hRe w = hRe z \ hIm w = hIm z" by transfer (rule complex_eq_iff) lemma hcomplex_equality [intro?]: "\z w. hRe z = hRe w \ hIm z = hIm w \ z = w" by transfer (rule complex_eqI) lemma hcomplex_hRe_zero [simp]: "hRe 0 = 0" by transfer simp lemma hcomplex_hIm_zero [simp]: "hIm 0 = 0" by transfer simp lemma hcomplex_hRe_one [simp]: "hRe 1 = 1" by transfer simp lemma hcomplex_hIm_one [simp]: "hIm 1 = 0" by transfer simp subsection \Addition for Nonstandard Complex Numbers\ lemma hRe_add: "\x y. hRe (x + y) = hRe x + hRe y" by transfer simp lemma hIm_add: "\x y. hIm (x + y) = hIm x + hIm y" by transfer simp subsection \More Minus Laws\ lemma hRe_minus: "\z. hRe (- z) = - hRe z" by transfer (rule uminus_complex.sel) lemma hIm_minus: "\z. hIm (- z) = - hIm z" by transfer (rule uminus_complex.sel) lemma hcomplex_add_minus_eq_minus: "x + y = 0 \ x = - y" for x y :: hcomplex apply (drule minus_unique) apply (simp add: minus_equation_iff [of x y]) done lemma hcomplex_i_mult_eq [simp]: "iii * iii = - 1" by transfer (rule i_squared) lemma hcomplex_i_mult_left [simp]: "\z. iii * (iii * z) = - z" by transfer (rule complex_i_mult_minus) lemma hcomplex_i_not_zero [simp]: "iii \ 0" by transfer (rule complex_i_not_zero) subsection \More Multiplication Laws\ lemma hcomplex_mult_minus_one: "- 1 * z = - z" for z :: hcomplex by simp lemma hcomplex_mult_minus_one_right: "z * - 1 = - z" for z :: hcomplex by simp lemma hcomplex_mult_left_cancel: "c \ 0 \ c * a = c * b \ a = b" for a b c :: hcomplex by simp lemma hcomplex_mult_right_cancel: "c \ 0 \ a * c = b * c \ a = b" for a b c :: hcomplex by simp subsection \Subtraction and Division\ (* TODO: delete *) lemma hcomplex_diff_eq_eq [simp]: "x - y = z \ x = z + y" for x y z :: hcomplex by (rule diff_eq_eq) subsection \Embedding Properties for \<^term>\hcomplex_of_hypreal\ Map\ lemma hRe_hcomplex_of_hypreal [simp]: "\z. hRe (hcomplex_of_hypreal z) = z" by transfer (rule Re_complex_of_real) lemma hIm_hcomplex_of_hypreal [simp]: "\z. hIm (hcomplex_of_hypreal z) = 0" by transfer (rule Im_complex_of_real) lemma hcomplex_of_epsilon_not_zero [simp]: "hcomplex_of_hypreal \ \ 0" by (simp add: epsilon_not_zero) subsection \\HComplex\ theorems\ lemma hRe_HComplex [simp]: "\x y. hRe (HComplex x y) = x" by transfer simp lemma hIm_HComplex [simp]: "\x y. hIm (HComplex x y) = y" by transfer simp lemma hcomplex_surj [simp]: "\z. HComplex (hRe z) (hIm z) = z" by transfer (rule complex_surj) lemma hcomplex_induct [case_names rect(*, induct type: hcomplex*)]: "(\x y. P (HComplex x y)) \ P z" by (rule hcomplex_surj [THEN subst]) blast subsection \Modulus (Absolute Value) of Nonstandard Complex Number\ lemma hcomplex_of_hypreal_abs: "hcomplex_of_hypreal \x\ = hcomplex_of_hypreal (hcmod (hcomplex_of_hypreal x))" by simp lemma HComplex_inject [simp]: "\x y x' y'. HComplex x y = HComplex x' y' \ x = x' \ y = y'" by transfer (rule complex.inject) lemma HComplex_add [simp]: "\x1 y1 x2 y2. HComplex x1 y1 + HComplex x2 y2 = HComplex (x1 + x2) (y1 + y2)" by transfer (rule complex_add) lemma HComplex_minus [simp]: "\x y. - HComplex x y = HComplex (- x) (- y)" by transfer (rule complex_minus) lemma HComplex_diff [simp]: "\x1 y1 x2 y2. HComplex x1 y1 - HComplex x2 y2 = HComplex (x1 - x2) (y1 - y2)" by transfer (rule complex_diff) lemma HComplex_mult [simp]: "\x1 y1 x2 y2. HComplex x1 y1 * HComplex x2 y2 = HComplex (x1*x2 - y1*y2) (x1*y2 + y1*x2)" by transfer (rule complex_mult) text \\HComplex_inverse\ is proved below.\ lemma hcomplex_of_hypreal_eq: "\r. hcomplex_of_hypreal r = HComplex r 0" by transfer (rule complex_of_real_def) lemma HComplex_add_hcomplex_of_hypreal [simp]: "\x y r. HComplex x y + hcomplex_of_hypreal r = HComplex (x + r) y" by transfer (rule Complex_add_complex_of_real) lemma hcomplex_of_hypreal_add_HComplex [simp]: "\r x y. hcomplex_of_hypreal r + HComplex x y = HComplex (r + x) y" by transfer (rule complex_of_real_add_Complex) lemma HComplex_mult_hcomplex_of_hypreal: "\x y r. HComplex x y * hcomplex_of_hypreal r = HComplex (x * r) (y * r)" by transfer (rule Complex_mult_complex_of_real) lemma hcomplex_of_hypreal_mult_HComplex: "\r x y. hcomplex_of_hypreal r * HComplex x y = HComplex (r * x) (r * y)" by transfer (rule complex_of_real_mult_Complex) lemma i_hcomplex_of_hypreal [simp]: "\r. iii * hcomplex_of_hypreal r = HComplex 0 r" by transfer (rule i_complex_of_real) lemma hcomplex_of_hypreal_i [simp]: "\r. hcomplex_of_hypreal r * iii = HComplex 0 r" by transfer (rule complex_of_real_i) subsection \Conjugation\ lemma hcomplex_hcnj_cancel_iff [iff]: "\x y. hcnj x = hcnj y \ x = y" by transfer (rule complex_cnj_cancel_iff) lemma hcomplex_hcnj_hcnj [simp]: "\z. hcnj (hcnj z) = z" by transfer (rule complex_cnj_cnj) lemma hcomplex_hcnj_hcomplex_of_hypreal [simp]: "\x. hcnj (hcomplex_of_hypreal x) = hcomplex_of_hypreal x" by transfer (rule complex_cnj_complex_of_real) lemma hcomplex_hmod_hcnj [simp]: "\z. hcmod (hcnj z) = hcmod z" by transfer (rule complex_mod_cnj) lemma hcomplex_hcnj_minus: "\z. hcnj (- z) = - hcnj z" by transfer (rule complex_cnj_minus) lemma hcomplex_hcnj_inverse: "\z. hcnj (inverse z) = inverse (hcnj z)" by transfer (rule complex_cnj_inverse) lemma hcomplex_hcnj_add: "\w z. hcnj (w + z) = hcnj w + hcnj z" by transfer (rule complex_cnj_add) lemma hcomplex_hcnj_diff: "\w z. hcnj (w - z) = hcnj w - hcnj z" by transfer (rule complex_cnj_diff) lemma hcomplex_hcnj_mult: "\w z. hcnj (w * z) = hcnj w * hcnj z" by transfer (rule complex_cnj_mult) lemma hcomplex_hcnj_divide: "\w z. hcnj (w / z) = hcnj w / hcnj z" by transfer (rule complex_cnj_divide) lemma hcnj_one [simp]: "hcnj 1 = 1" by transfer (rule complex_cnj_one) lemma hcomplex_hcnj_zero [simp]: "hcnj 0 = 0" by transfer (rule complex_cnj_zero) lemma hcomplex_hcnj_zero_iff [iff]: "\z. hcnj z = 0 \ z = 0" by transfer (rule complex_cnj_zero_iff) lemma hcomplex_mult_hcnj: "\z. z * hcnj z = hcomplex_of_hypreal ((hRe z)\<^sup>2 + (hIm z)\<^sup>2)" by transfer (rule complex_mult_cnj) subsection \More Theorems about the Function \<^term>\hcmod\\ lemma hcmod_hcomplex_of_hypreal_of_nat [simp]: "hcmod (hcomplex_of_hypreal (hypreal_of_nat n)) = hypreal_of_nat n" by simp lemma hcmod_hcomplex_of_hypreal_of_hypnat [simp]: "hcmod (hcomplex_of_hypreal(hypreal_of_hypnat n)) = hypreal_of_hypnat n" by simp lemma hcmod_mult_hcnj: "\z. hcmod (z * hcnj z) = (hcmod z)\<^sup>2" by transfer (rule complex_mod_mult_cnj) lemma hcmod_triangle_ineq2 [simp]: "\a b. hcmod (b + a) - hcmod b \ hcmod a" by transfer (rule complex_mod_triangle_ineq2) lemma hcmod_diff_ineq [simp]: "\a b. hcmod a - hcmod b \ hcmod (a + b)" by transfer (rule norm_diff_ineq) subsection \Exponentiation\ lemma hcomplexpow_0 [simp]: "z ^ 0 = 1" for z :: hcomplex by (rule power_0) lemma hcomplexpow_Suc [simp]: "z ^ (Suc n) = z * (z ^ n)" for z :: hcomplex by (rule power_Suc) lemma hcomplexpow_i_squared [simp]: "iii\<^sup>2 = -1" by transfer (rule power2_i) lemma hcomplex_of_hypreal_pow: "\x. hcomplex_of_hypreal (x ^ n) = hcomplex_of_hypreal x ^ n" by transfer (rule of_real_power) lemma hcomplex_hcnj_pow: "\z. hcnj (z ^ n) = hcnj z ^ n" by transfer (rule complex_cnj_power) lemma hcmod_hcomplexpow: "\x. hcmod (x ^ n) = hcmod x ^ n" by transfer (rule norm_power) lemma hcpow_minus: "\x n. (- x :: hcomplex) pow n = (if ( *p* even) n then (x pow n) else - (x pow n))" by transfer simp lemma hcpow_mult: "(r * s) pow n = (r pow n) * (s pow n)" for r s :: hcomplex by (fact hyperpow_mult) lemma hcpow_zero2 [simp]: "\n. 0 pow (hSuc n) = (0::'a::semiring_1 star)" by transfer (rule power_0_Suc) lemma hcpow_not_zero [simp,intro]: "\r n. r \ 0 \ r pow n \ (0::hcomplex)" by (fact hyperpow_not_zero) lemma hcpow_zero_zero: "r pow n = 0 \ r = 0" for r :: hcomplex by (blast intro: ccontr dest: hcpow_not_zero) subsection \The Function \<^term>\hsgn\\ lemma hsgn_zero [simp]: "hsgn 0 = 0" by transfer (rule sgn_zero) lemma hsgn_one [simp]: "hsgn 1 = 1" by transfer (rule sgn_one) lemma hsgn_minus: "\z. hsgn (- z) = - hsgn z" by transfer (rule sgn_minus) lemma hsgn_eq: "\z. hsgn z = z / hcomplex_of_hypreal (hcmod z)" by transfer (rule sgn_eq) lemma hcmod_i: "\x y. hcmod (HComplex x y) = ( *f* sqrt) (x\<^sup>2 + y\<^sup>2)" by transfer (rule complex_norm) lemma hcomplex_eq_cancel_iff1 [simp]: "hcomplex_of_hypreal xa = HComplex x y \ xa = x \ y = 0" by (simp add: hcomplex_of_hypreal_eq) lemma hcomplex_eq_cancel_iff2 [simp]: "HComplex x y = hcomplex_of_hypreal xa \ x = xa \ y = 0" by (simp add: hcomplex_of_hypreal_eq) lemma HComplex_eq_0 [simp]: "\x y. HComplex x y = 0 \ x = 0 \ y = 0" by transfer (rule Complex_eq_0) lemma HComplex_eq_1 [simp]: "\x y. HComplex x y = 1 \ x = 1 \ y = 0" by transfer (rule Complex_eq_1) lemma i_eq_HComplex_0_1: "iii = HComplex 0 1" by transfer (simp add: complex_eq_iff) lemma HComplex_eq_i [simp]: "\x y. HComplex x y = iii \ x = 0 \ y = 1" by transfer (rule Complex_eq_i) lemma hRe_hsgn [simp]: "\z. hRe (hsgn z) = hRe z / hcmod z" by transfer (rule Re_sgn) lemma hIm_hsgn [simp]: "\z. hIm (hsgn z) = hIm z / hcmod z" by transfer (rule Im_sgn) lemma HComplex_inverse: "\x y. inverse (HComplex x y) = HComplex (x / (x\<^sup>2 + y\<^sup>2)) (- y / (x\<^sup>2 + y\<^sup>2))" by transfer (rule complex_inverse) lemma hRe_mult_i_eq[simp]: "\y. hRe (iii * hcomplex_of_hypreal y) = 0" by transfer simp lemma hIm_mult_i_eq [simp]: "\y. hIm (iii * hcomplex_of_hypreal y) = y" by transfer simp lemma hcmod_mult_i [simp]: "\y. hcmod (iii * hcomplex_of_hypreal y) = \y\" by transfer (simp add: norm_complex_def) lemma hcmod_mult_i2 [simp]: "\y. hcmod (hcomplex_of_hypreal y * iii) = \y\" by transfer (simp add: norm_complex_def) subsubsection \\harg\\ lemma cos_harg_i_mult_zero [simp]: "\y. y \ 0 \ ( *f* cos) (harg (HComplex 0 y)) = 0" by transfer (simp add: Complex_eq) subsection \Polar Form for Nonstandard Complex Numbers\ lemma complex_split_polar2: "\n. \r a. (z n) = complex_of_real r * Complex (cos a) (sin a)" unfolding Complex_eq by (auto intro: complex_split_polar) lemma hcomplex_split_polar: "\z. \r a. z = hcomplex_of_hypreal r * (HComplex (( *f* cos) a) (( *f* sin) a))" by transfer (simp add: Complex_eq complex_split_polar) lemma hcis_eq: "\a. hcis a = hcomplex_of_hypreal (( *f* cos) a) + iii * hcomplex_of_hypreal (( *f* sin) a)" by transfer (simp add: complex_eq_iff) lemma hrcis_Ex: "\z. \r a. z = hrcis r a" by transfer (rule rcis_Ex) lemma hRe_hcomplex_polar [simp]: "\r a. hRe (hcomplex_of_hypreal r * HComplex (( *f* cos) a) (( *f* sin) a)) = r * ( *f* cos) a" by transfer simp lemma hRe_hrcis [simp]: "\r a. hRe (hrcis r a) = r * ( *f* cos) a" by transfer (rule Re_rcis) lemma hIm_hcomplex_polar [simp]: "\r a. hIm (hcomplex_of_hypreal r * HComplex (( *f* cos) a) (( *f* sin) a)) = r * ( *f* sin) a" by transfer simp lemma hIm_hrcis [simp]: "\r a. hIm (hrcis r a) = r * ( *f* sin) a" by transfer (rule Im_rcis) lemma hcmod_unit_one [simp]: "\a. hcmod (HComplex (( *f* cos) a) (( *f* sin) a)) = 1" by transfer (simp add: cmod_unit_one) lemma hcmod_complex_polar [simp]: "\r a. hcmod (hcomplex_of_hypreal r * HComplex (( *f* cos) a) (( *f* sin) a)) = \r\" by transfer (simp add: Complex_eq cmod_complex_polar) lemma hcmod_hrcis [simp]: "\r a. hcmod(hrcis r a) = \r\" by transfer (rule complex_mod_rcis) text \\(r1 * hrcis a) * (r2 * hrcis b) = r1 * r2 * hrcis (a + b)\\ lemma hcis_hrcis_eq: "\a. hcis a = hrcis 1 a" by transfer (rule cis_rcis_eq) declare hcis_hrcis_eq [symmetric, simp] lemma hrcis_mult: "\a b r1 r2. hrcis r1 a * hrcis r2 b = hrcis (r1 * r2) (a + b)" by transfer (rule rcis_mult) lemma hcis_mult: "\a b. hcis a * hcis b = hcis (a + b)" by transfer (rule cis_mult) lemma hcis_zero [simp]: "hcis 0 = 1" by transfer (rule cis_zero) lemma hrcis_zero_mod [simp]: "\a. hrcis 0 a = 0" by transfer (rule rcis_zero_mod) lemma hrcis_zero_arg [simp]: "\r. hrcis r 0 = hcomplex_of_hypreal r" by transfer (rule rcis_zero_arg) lemma hcomplex_i_mult_minus [simp]: "\x. iii * (iii * x) = - x" by transfer (rule complex_i_mult_minus) lemma hcomplex_i_mult_minus2 [simp]: "iii * iii * x = - x" by simp lemma hcis_hypreal_of_nat_Suc_mult: "\a. hcis (hypreal_of_nat (Suc n) * a) = hcis a * hcis (hypreal_of_nat n * a)" by transfer (simp add: distrib_right cis_mult) lemma NSDeMoivre: "\a. (hcis a) ^ n = hcis (hypreal_of_nat n * a)" by transfer (rule DeMoivre) lemma hcis_hypreal_of_hypnat_Suc_mult: "\a n. hcis (hypreal_of_hypnat (n + 1) * a) = hcis a * hcis (hypreal_of_hypnat n * a)" by transfer (simp add: distrib_right cis_mult) lemma NSDeMoivre_ext: "\a n. (hcis a) pow n = hcis (hypreal_of_hypnat n * a)" by transfer (rule DeMoivre) lemma NSDeMoivre2: "\a r. (hrcis r a) ^ n = hrcis (r ^ n) (hypreal_of_nat n * a)" by transfer (rule DeMoivre2) lemma DeMoivre2_ext: "\a r n. (hrcis r a) pow n = hrcis (r pow n) (hypreal_of_hypnat n * a)" by transfer (rule DeMoivre2) lemma hcis_inverse [simp]: "\a. inverse (hcis a) = hcis (- a)" by transfer (rule cis_inverse) lemma hrcis_inverse: "\a r. inverse (hrcis r a) = hrcis (inverse r) (- a)" by transfer (simp add: rcis_inverse inverse_eq_divide [symmetric]) lemma hRe_hcis [simp]: "\a. hRe (hcis a) = ( *f* cos) a" by transfer simp lemma hIm_hcis [simp]: "\a. hIm (hcis a) = ( *f* sin) a" by transfer simp lemma cos_n_hRe_hcis_pow_n: "( *f* cos) (hypreal_of_nat n * a) = hRe (hcis a ^ n)" by (simp add: NSDeMoivre) lemma sin_n_hIm_hcis_pow_n: "( *f* sin) (hypreal_of_nat n * a) = hIm (hcis a ^ n)" by (simp add: NSDeMoivre) lemma cos_n_hRe_hcis_hcpow_n: "( *f* cos) (hypreal_of_hypnat n * a) = hRe (hcis a pow n)" by (simp add: NSDeMoivre_ext) lemma sin_n_hIm_hcis_hcpow_n: "( *f* sin) (hypreal_of_hypnat n * a) = hIm (hcis a pow n)" by (simp add: NSDeMoivre_ext) lemma hExp_add: "\a b. hExp (a + b) = hExp a * hExp b" by transfer (rule exp_add) subsection \\<^term>\hcomplex_of_complex\: the Injection from type \<^typ>\complex\ to to \<^typ>\hcomplex\\ lemma hcomplex_of_complex_i: "iii = hcomplex_of_complex \" by (rule iii_def) lemma hRe_hcomplex_of_complex: "hRe (hcomplex_of_complex z) = hypreal_of_real (Re z)" by transfer (rule refl) lemma hIm_hcomplex_of_complex: "hIm (hcomplex_of_complex z) = hypreal_of_real (Im z)" by transfer (rule refl) lemma hcmod_hcomplex_of_complex: "hcmod (hcomplex_of_complex x) = hypreal_of_real (cmod x)" by transfer (rule refl) subsection \Numerals and Arithmetic\ lemma hcomplex_of_hypreal_eq_hcomplex_of_complex: "hcomplex_of_hypreal (hypreal_of_real x) = hcomplex_of_complex (complex_of_real x)" by transfer (rule refl) lemma hcomplex_hypreal_numeral: "hcomplex_of_complex (numeral w) = hcomplex_of_hypreal(numeral w)" by transfer (rule of_real_numeral [symmetric]) lemma hcomplex_hypreal_neg_numeral: "hcomplex_of_complex (- numeral w) = hcomplex_of_hypreal(- numeral w)" by transfer (rule of_real_neg_numeral [symmetric]) lemma hcomplex_numeral_hcnj [simp]: "hcnj (numeral v :: hcomplex) = numeral v" by transfer (rule complex_cnj_numeral) lemma hcomplex_numeral_hcmod [simp]: "hcmod (numeral v :: hcomplex) = (numeral v :: hypreal)" by transfer (rule norm_numeral) lemma hcomplex_neg_numeral_hcmod [simp]: "hcmod (- numeral v :: hcomplex) = (numeral v :: hypreal)" by transfer (rule norm_neg_numeral) lemma hcomplex_numeral_hRe [simp]: "hRe (numeral v :: hcomplex) = numeral v" by transfer (rule complex_Re_numeral) lemma hcomplex_numeral_hIm [simp]: "hIm (numeral v :: hcomplex) = 0" by transfer (rule complex_Im_numeral) end