src/HOL/Complex/NSComplex.thy
author kleing
Tue, 13 May 2003 08:59:21 +0200
changeset 14024 213dcc39358f
parent 13957 10dbf16be15f
child 14314 314da085adf3
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:       NSComplex.thy
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: Nonstandard 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
NSComplex = NSInduct + 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
     8
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
     9
constdefs
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    10
    hcomplexrel :: "((nat=>complex)*(nat=>complex)) set"
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    11
    "hcomplexrel == {p. EX X Y. p = ((X::nat=>complex),Y) & 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    12
                        {n::nat. X(n) = Y(n)}: FreeUltrafilterNat}"
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    13
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    14
typedef hcomplex = "{x::nat=>complex. True}//hcomplexrel"      (quotient_def)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    15
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    16
instance
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    17
   hcomplex  :: {zero,one,plus,times,minus,power,inverse}
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
defs
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    20
  hcomplex_zero_def 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    21
  "0 == Abs_hcomplex(hcomplexrel `` {%n. (0::complex)})"
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    22
  
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    23
  hcomplex_one_def  
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    24
  "1 == Abs_hcomplex(hcomplexrel `` {%n. (1::complex)})"
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    25
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    26
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    27
  hcomplex_minus_def
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    28
  "- z == Abs_hcomplex(UN X: Rep_hcomplex(z). hcomplexrel `` {%n::nat. - (X n)})"
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    29
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    30
  hcomplex_diff_def
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    31
  "w - z == w + -(z::hcomplex)"
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    32
  
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    33
constdefs
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    34
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    35
  hcomplex_of_complex :: complex => hcomplex
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    36
  "hcomplex_of_complex z == Abs_hcomplex(hcomplexrel `` {%n. z})"
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    37
 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    38
  hcinv  :: hcomplex => hcomplex
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    39
  "inverse(P)   == Abs_hcomplex(UN X: Rep_hcomplex(P). 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    40
                    hcomplexrel `` {%n. inverse(X n)})"
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
  (*--- real and Imaginary parts ---*)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    43
  
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    44
  hRe :: hcomplex => hypreal
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    45
  "hRe(z) == Abs_hypreal(UN X:Rep_hcomplex(z). hyprel `` {%n. Re (X n)})"
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
  hIm :: hcomplex => hypreal
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    48
  "hIm(z) == Abs_hypreal(UN X:Rep_hcomplex(z). hyprel `` {%n. Im (X n)})"   
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    49
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    50
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    51
  (*----------- modulus ------------*)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    52
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    53
  hcmod :: hcomplex => hypreal
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    54
  "hcmod z == Abs_hypreal(UN X: Rep_hcomplex(z).
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    55
			  hyprel `` {%n. cmod (X n)})"
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    56
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    57
  (*------ imaginary unit ----------*)					 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    58
			      
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    59
  iii :: hcomplex			      
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    60
  "iii == Abs_hcomplex(hcomplexrel `` {%n. ii})"
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    61
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    62
  (*------- complex conjugate ------*)
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
  hcnj :: hcomplex => hcomplex
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    65
  "hcnj z == Abs_hcomplex(UN X:Rep_hcomplex(z). hcomplexrel `` {%n. cnj (X n)})"
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    66
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    67
  (*------------ Argand -------------*)		       
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    68
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    69
  hsgn :: hcomplex => hcomplex
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    70
  "hsgn z == Abs_hcomplex(UN X:Rep_hcomplex(z). hcomplexrel `` {%n. sgn(X n)})"
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    71
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    72
  harg :: hcomplex => hypreal
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    73
  "harg z == Abs_hypreal(UN X:Rep_hcomplex(z). hyprel `` {%n. arg(X n)})"
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    74
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    75
  (* abbreviation for (cos a + i sin a) *)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    76
  hcis :: hypreal => hcomplex
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    77
  "hcis a == Abs_hcomplex(UN X:Rep_hypreal(a). hcomplexrel `` {%n. cis (X n)})"
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    78
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    79
  (* abbreviation for r*(cos a + i sin a) *)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    80
  hrcis :: [hypreal, hypreal] => hcomplex
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    81
  "hrcis r a == hcomplex_of_hypreal r * hcis a"
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
  (*----- injection from hyperreals -----*)			   
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    84
 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    85
  hcomplex_of_hypreal :: hypreal => hcomplex
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    86
  "hcomplex_of_hypreal r == Abs_hcomplex(UN X:Rep_hypreal(r).
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    87
			       hcomplexrel `` {%n. complex_of_real (X n)})"
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    88
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    89
  (*------------ e ^ (x + iy) ------------*)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    90
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    91
  hexpi :: hcomplex => hcomplex
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    92
  "hexpi z == hcomplex_of_hypreal(( *f* exp) (hRe z)) * hcis (hIm z)"
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    93
   
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    94
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    95
defs  
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    96
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
  (*----------- division ----------*)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
    99
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   100
  hcomplex_divide_def
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   101
  "w / (z::hcomplex) == w * inverse z"
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
  hcomplex_add_def
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   104
  "w + z == Abs_hcomplex(UN X:Rep_hcomplex(w). UN Y:Rep_hcomplex(z).
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   105
		      hcomplexrel `` {%n. X n + Y n})"
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   106
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   107
  hcomplex_mult_def
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   108
  "w * z == Abs_hcomplex(UN X:Rep_hcomplex(w). UN Y:Rep_hcomplex(z).
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   109
		      hcomplexrel `` {%n. X n * Y n})"    
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   110
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   111
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   112
primrec
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   113
     hcomplexpow_0   "z ^ 0       = 1"
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   114
     hcomplexpow_Suc "z ^ (Suc n) = (z::hcomplex) * (z ^ n)"
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   115
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   116
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   117
consts
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   118
  "hcpow"  :: [hcomplex,hypnat] => hcomplex     (infixr 80)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   119
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   120
defs
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   121
  (* hypernatural powers of nonstandard complex numbers *)
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   122
  hcpow_def
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   123
  "(z::hcomplex) hcpow (n::hypnat) 
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   124
      == Abs_hcomplex(UN X:Rep_hcomplex(z). UN Y: Rep_hypnat(n).
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   125
             hcomplexrel `` {%n. (X n) ^ (Y n)})"
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   126
10dbf16be15f new session Complex for the complex numbers
paulson
parents:
diff changeset
   127
end