src/HOL/Complex/CLim.thy
changeset 17300 5798fbf42a6a
parent 17298 ad73fb6144cf
child 17318 bc1c75855f3d
equal deleted inserted replaced
17299:c6eecde058e4 17300:5798fbf42a6a
   121               hIm_hcomplex_of_complex)
   121               hIm_hcomplex_of_complex)
   122 
   122 
   123 lemma CLIM_NSCLIM:
   123 lemma CLIM_NSCLIM:
   124       "f -- x --C> L ==> f -- x --NSC> L"
   124       "f -- x --C> L ==> f -- x --NSC> L"
   125 apply (simp add: CLIM_def NSCLIM_def capprox_def, auto)
   125 apply (simp add: CLIM_def NSCLIM_def capprox_def, auto)
   126 apply (rule_tac z = xa in eq_Abs_hcomplex)
   126 apply (rule_tac z = xa in eq_Abs_star)
   127 apply (auto simp add: hcomplex_of_complex_def starfunC hcomplex_diff 
   127 apply (auto simp add: hcomplex_of_complex_def starfunC hcomplex_diff 
       
   128          star_of_def star_n_def
   128          CInfinitesimal_hcmod_iff hcmod Infinitesimal_FreeUltrafilterNat_iff)
   129          CInfinitesimal_hcmod_iff hcmod Infinitesimal_FreeUltrafilterNat_iff)
   129 apply (rule bexI, rule_tac [2] lemma_starrel_refl, safe)
   130 apply (rule bexI, rule_tac [2] lemma_starrel_refl, safe)
   130 apply (drule_tac x = u in spec, auto)
   131 apply (drule_tac x = u in spec, auto)
   131 apply (drule_tac x = s in spec, auto, ultra)
   132 apply (drule_tac x = s in spec, auto, ultra)
   132 apply (drule sym, auto)
   133 apply (drule sym, auto)
   133 done
   134 done
   134 
   135 
   135 lemma eq_Abs_hcomplex_ALL:
   136 lemma eq_Abs_star_ALL:
   136      "(\<forall>t. P t) = (\<forall>X. P (Abs_hcomplex(hcomplexrel `` {X})))"
   137      "(\<forall>t. P t) = (\<forall>X. P (Abs_star(starrel `` {X})))"
   137 apply auto
   138 apply auto
   138 apply (rule_tac z = t in eq_Abs_hcomplex, auto)
   139 apply (rule_tac z = t in eq_Abs_star, auto)
   139 done
   140 done
   140 
   141 
   141 lemma lemma_CLIM:
   142 lemma lemma_CLIM:
   142      "\<forall>s. 0 < s --> (\<exists>xa.  xa \<noteq> x &
   143      "\<forall>s. 0 < s --> (\<exists>xa.  xa \<noteq> x &
   143          cmod (xa - x) < s  & r \<le> cmod (f xa - L))
   144          cmod (xa - x) < s  & r \<le> cmod (f xa - L))
   166 
   167 
   167 lemma NSCLIM_CLIM:
   168 lemma NSCLIM_CLIM:
   168      "f -- x --NSC> L ==> f -- x --C> L"
   169      "f -- x --NSC> L ==> f -- x --C> L"
   169 apply (simp add: CLIM_def NSCLIM_def)
   170 apply (simp add: CLIM_def NSCLIM_def)
   170 apply (rule ccontr) 
   171 apply (rule ccontr) 
   171 apply (auto simp add: eq_Abs_hcomplex_ALL starfunC 
   172 apply (auto simp add: eq_Abs_star_ALL starfunC 
   172             CInfinitesimal_capprox_minus [symmetric] hcomplex_diff
   173             CInfinitesimal_capprox_minus [symmetric] hcomplex_diff
   173             CInfinitesimal_hcmod_iff hcomplex_of_complex_def 
   174             CInfinitesimal_hcmod_iff hcomplex_of_complex_def 
       
   175             star_of_def star_n_def
   174             Infinitesimal_FreeUltrafilterNat_iff hcmod)
   176             Infinitesimal_FreeUltrafilterNat_iff hcmod)
   175 apply (simp add: linorder_not_less)
   177 apply (simp add: linorder_not_less)
   176 apply (drule lemma_skolemize_CLIM2, safe)
   178 apply (drule lemma_skolemize_CLIM2, safe)
   177 apply (drule_tac x = X in spec, auto)
   179 apply (drule_tac x = X in spec, auto)
   178 apply (drule lemma_csimp [THEN complex_seq_to_hcomplex_CInfinitesimal])
   180 apply (drule lemma_csimp [THEN complex_seq_to_hcomplex_CInfinitesimal])
   179 apply (simp add: CInfinitesimal_hcmod_iff hcomplex_of_complex_def 
   181 apply (simp add: CInfinitesimal_hcmod_iff hcomplex_of_complex_def 
       
   182             star_of_def star_n_def
   180             Infinitesimal_FreeUltrafilterNat_iff hcomplex_diff hcmod,  blast)
   183             Infinitesimal_FreeUltrafilterNat_iff hcomplex_diff hcmod,  blast)
   181 apply (drule_tac x = r in spec, clarify)
   184 apply (drule_tac x = r in spec, clarify)
   182 apply (drule FreeUltrafilterNat_all, ultra, arith)
   185 apply (drule FreeUltrafilterNat_all, ultra, arith)
   183 done
   186 done
   184 
   187 
   190 
   193 
   191 subsection{*Limit of Complex to Real Function*}
   194 subsection{*Limit of Complex to Real Function*}
   192 
   195 
   193 lemma CRLIM_NSCRLIM: "f -- x --CR> L ==> f -- x --NSCR> L"
   196 lemma CRLIM_NSCRLIM: "f -- x --CR> L ==> f -- x --NSCR> L"
   194 apply (simp add: CRLIM_def NSCRLIM_def capprox_def, auto)
   197 apply (simp add: CRLIM_def NSCRLIM_def capprox_def, auto)
   195 apply (rule_tac z = xa in eq_Abs_hcomplex)
   198 apply (rule_tac z = xa in eq_Abs_star)
   196 apply (auto simp add: hcomplex_of_complex_def starfunCR hcomplex_diff
   199 apply (auto simp add: hcomplex_of_complex_def starfunCR hcomplex_diff
   197               CInfinitesimal_hcmod_iff hcmod hypreal_diff
   200               CInfinitesimal_hcmod_iff hcmod hypreal_diff
   198               Infinitesimal_FreeUltrafilterNat_iff
   201               Infinitesimal_FreeUltrafilterNat_iff
   199               star_of_def star_n_def
   202               star_of_def star_n_def
   200               Infinitesimal_approx_minus [symmetric] hypreal_of_real_def)
   203               Infinitesimal_approx_minus [symmetric] hypreal_of_real_def)
   230 by auto
   233 by auto
   231 
   234 
   232 lemma NSCRLIM_CRLIM: "f -- x --NSCR> L ==> f -- x --CR> L"
   235 lemma NSCRLIM_CRLIM: "f -- x --NSCR> L ==> f -- x --CR> L"
   233 apply (simp add: CRLIM_def NSCRLIM_def capprox_def)
   236 apply (simp add: CRLIM_def NSCRLIM_def capprox_def)
   234 apply (rule ccontr) 
   237 apply (rule ccontr) 
   235 apply (auto simp add: eq_Abs_hcomplex_ALL starfunCR hcomplex_diff 
   238 apply (auto simp add: eq_Abs_star_ALL starfunCR hcomplex_diff 
   236              hcomplex_of_complex_def hypreal_diff CInfinitesimal_hcmod_iff 
   239              hcomplex_of_complex_def hypreal_diff CInfinitesimal_hcmod_iff 
   237              hcmod Infinitesimal_approx_minus [symmetric] 
   240              hcmod Infinitesimal_approx_minus [symmetric]
       
   241              star_of_def star_n_def 
   238              Infinitesimal_FreeUltrafilterNat_iff)
   242              Infinitesimal_FreeUltrafilterNat_iff)
   239 apply (simp add: linorder_not_less)
   243 apply (simp add: linorder_not_less)
   240 apply (drule lemma_skolemize_CRLIM2, safe)
   244 apply (drule lemma_skolemize_CRLIM2, safe)
   241 apply (drule_tac x = X in spec, auto)
   245 apply (drule_tac x = X in spec, auto)
   242 apply (drule lemma_crsimp [THEN complex_seq_to_hcomplex_CInfinitesimal])
   246 apply (drule lemma_crsimp [THEN complex_seq_to_hcomplex_CInfinitesimal])
   243 apply (simp add: CInfinitesimal_hcmod_iff hcomplex_of_complex_def 
   247 apply (simp add: CInfinitesimal_hcmod_iff hcomplex_of_complex_def 
       
   248              star_of_def star_n_def
   244              Infinitesimal_FreeUltrafilterNat_iff hcomplex_diff hcmod)
   249              Infinitesimal_FreeUltrafilterNat_iff hcomplex_diff hcmod)
   245 apply (auto simp add: hypreal_of_real_def star_of_def star_n_def hypreal_diff)
   250 apply (auto simp add: hypreal_of_real_def star_of_def star_n_def hypreal_diff)
   246 apply (drule_tac x = r in spec, clarify)
   251 apply (drule_tac x = r in spec, clarify)
   247 apply (drule FreeUltrafilterNat_all, ultra)
   252 apply (drule FreeUltrafilterNat_all, ultra)
   248 done
   253 done
   406 (** another equivalence result **)
   411 (** another equivalence result **)
   407 lemma NSCLIM_NSCRLIM_iff:
   412 lemma NSCLIM_NSCRLIM_iff:
   408    "(f -- x --NSC> L) = ((%y. cmod(f y - L)) -- x --NSCR> 0)"
   413    "(f -- x --NSC> L) = ((%y. cmod(f y - L)) -- x --NSCR> 0)"
   409 apply (auto simp add: NSCLIM_def NSCRLIM_def CInfinitesimal_capprox_minus [symmetric] CInfinitesimal_hcmod_iff)
   414 apply (auto simp add: NSCLIM_def NSCRLIM_def CInfinitesimal_capprox_minus [symmetric] CInfinitesimal_hcmod_iff)
   410 apply (auto dest!: spec) 
   415 apply (auto dest!: spec) 
   411 apply (rule_tac [!] z = xa in eq_Abs_hcomplex)
   416 apply (rule_tac [!] z = xa in eq_Abs_star)
   412 apply (auto simp add: hcomplex_diff starfunC starfunCR hcomplex_of_complex_def hcmod mem_infmal_iff)
   417 apply (auto simp add: hcomplex_diff starfunC starfunCR hcomplex_of_complex_def hcmod mem_infmal_iff star_of_def star_n_def)
   413 done
   418 done
   414 
   419 
   415 (** much, much easier standard proof **)
   420 (** much, much easier standard proof **)
   416 lemma CLIM_CRLIM_iff: "(f -- x --C> L) = ((%y. cmod(f y - L)) -- x --CR> 0)"
   421 lemma CLIM_CRLIM_iff: "(f -- x --C> L) = ((%y. cmod(f y - L)) -- x --CR> 0)"
   417 by (simp add: CLIM_def CRLIM_def)
   422 by (simp add: CLIM_def CRLIM_def)
   425      "(f -- a --NSC> L) = ((%x. Re(f x)) -- a --NSCR> Re(L) &
   430      "(f -- a --NSC> L) = ((%x. Re(f x)) -- a --NSCR> Re(L) &
   426                             (%x. Im(f x)) -- a --NSCR> Im(L))"
   431                             (%x. Im(f x)) -- a --NSCR> Im(L))"
   427 apply (auto intro: NSCLIM_NSCRLIM_Re NSCLIM_NSCRLIM_Im)
   432 apply (auto intro: NSCLIM_NSCRLIM_Re NSCLIM_NSCRLIM_Im)
   428 apply (auto simp add: NSCLIM_def NSCRLIM_def)
   433 apply (auto simp add: NSCLIM_def NSCRLIM_def)
   429 apply (auto dest!: spec) 
   434 apply (auto dest!: spec) 
   430 apply (rule_tac z = x in eq_Abs_hcomplex)
   435 apply (rule_tac z = x in eq_Abs_star)
   431 apply (simp add: capprox_approx_iff starfunC hcomplex_of_complex_def starfunCR hypreal_of_real_def star_of_def star_n_def)
   436 apply (simp add: capprox_approx_iff starfunC hcomplex_of_complex_def starfunCR hypreal_of_real_def star_of_def star_n_def)
   432 done
   437 done
   433 
   438 
   434 lemma CLIM_CRLIM_Re_Im_iff:
   439 lemma CLIM_CRLIM_Re_Im_iff:
   435      "(f -- a --C> L) = ((%x. Re(f x)) -- a --CR> Re(L) &
   440      "(f -- a --C> L) = ((%x. Re(f x)) -- a --CR> Re(L) &
   479 apply (drule_tac x = "hcomplex_of_complex a + x" in spec)
   484 apply (drule_tac x = "hcomplex_of_complex a + x" in spec)
   480 apply (drule_tac [2] x = "- hcomplex_of_complex a + x" in spec, safe, simp)
   485 apply (drule_tac [2] x = "- hcomplex_of_complex a + x" in spec, safe, simp)
   481 apply (rule mem_cinfmal_iff [THEN iffD2, THEN CInfinitesimal_add_capprox_self [THEN capprox_sym]])
   486 apply (rule mem_cinfmal_iff [THEN iffD2, THEN CInfinitesimal_add_capprox_self [THEN capprox_sym]])
   482 apply (rule_tac [4] capprox_minus_iff2 [THEN iffD1])
   487 apply (rule_tac [4] capprox_minus_iff2 [THEN iffD1])
   483  prefer 3 apply (simp add: compare_rls hcomplex_add_commute)
   488  prefer 3 apply (simp add: compare_rls hcomplex_add_commute)
   484 apply (rule_tac [2] z = x in eq_Abs_hcomplex)
   489 apply (rule_tac [2] z = x in eq_Abs_star)
   485 apply (rule_tac [4] z = x in eq_Abs_hcomplex)
   490 apply (rule_tac [4] z = x in eq_Abs_star)
   486 apply (auto simp add: starfunC hcomplex_of_complex_def hcomplex_minus hcomplex_add)
   491 apply (auto simp add: starfunC hcomplex_of_complex_def hcomplex_minus hcomplex_add star_of_def star_n_def)
   487 done
   492 done
   488 
   493 
   489 lemma NSCLIM_isContc_iff:
   494 lemma NSCLIM_isContc_iff:
   490      "(f -- a --NSC> f a) = ((%h. f(a + h)) -- 0 --NSC> f a)"
   495      "(f -- a --NSC> f a) = ((%h. f(a + h)) -- 0 --NSC> f a)"
   491 by (rule NSCLIM_h_iff)
   496 by (rule NSCLIM_h_iff)
   858 apply safe
   863 apply safe
   859 apply (frule_tac f = g in NSCDERIV_capprox)
   864 apply (frule_tac f = g in NSCDERIV_capprox)
   860 apply (auto simp add: starfunC_lambda_cancel2 starfunC_o [symmetric])
   865 apply (auto simp add: starfunC_lambda_cancel2 starfunC_o [symmetric])
   861 apply (case_tac "( *fc* g) (hcomplex_of_complex (x) + xa) = hcomplex_of_complex (g x) ")
   866 apply (case_tac "( *fc* g) (hcomplex_of_complex (x) + xa) = hcomplex_of_complex (g x) ")
   862 apply (drule_tac g = g in NSCDERIV_zero)
   867 apply (drule_tac g = g in NSCDERIV_zero)
   863 apply (auto simp add: hcomplex_divide_def)
   868 apply (auto simp add: divide_inverse)
   864 apply (rule_tac z1 = "( *fc* g) (hcomplex_of_complex (x) + xa) - hcomplex_of_complex (g x) " and y1 = "inverse xa" in lemma_complex_chain [THEN ssubst])
   869 apply (rule_tac z1 = "( *fc* g) (hcomplex_of_complex (x) + xa) - hcomplex_of_complex (g x) " and y1 = "inverse xa" in lemma_complex_chain [THEN ssubst])
   865 apply (simp (no_asm_simp))
   870 apply (simp (no_asm_simp))
   866 apply (rule capprox_mult_hcomplex_of_complex)
   871 apply (rule capprox_mult_hcomplex_of_complex)
   867 apply (auto intro!: NSCDERIVD1 intro: capprox_minus_iff [THEN iffD2] 
   872 apply (auto intro!: NSCDERIVD1 intro: capprox_minus_iff [THEN iffD2] 
   868             simp add: diff_minus [symmetric] divide_inverse [symmetric])
   873             simp add: diff_minus [symmetric] divide_inverse [symmetric])
  1026 val complex_add_minus_iff = thm "complex_add_minus_iff";
  1031 val complex_add_minus_iff = thm "complex_add_minus_iff";
  1027 val complex_add_eq_0_iff = thm "complex_add_eq_0_iff";
  1032 val complex_add_eq_0_iff = thm "complex_add_eq_0_iff";
  1028 val NSCLIM_NSCRLIM_Re = thm "NSCLIM_NSCRLIM_Re";
  1033 val NSCLIM_NSCRLIM_Re = thm "NSCLIM_NSCRLIM_Re";
  1029 val NSCLIM_NSCRLIM_Im = thm "NSCLIM_NSCRLIM_Im";
  1034 val NSCLIM_NSCRLIM_Im = thm "NSCLIM_NSCRLIM_Im";
  1030 val CLIM_NSCLIM = thm "CLIM_NSCLIM";
  1035 val CLIM_NSCLIM = thm "CLIM_NSCLIM";
  1031 val eq_Abs_hcomplex_ALL = thm "eq_Abs_hcomplex_ALL";
  1036 val eq_Abs_star_ALL = thm "eq_Abs_star_ALL";
  1032 val lemma_CLIM = thm "lemma_CLIM";
  1037 val lemma_CLIM = thm "lemma_CLIM";
  1033 val lemma_skolemize_CLIM2 = thm "lemma_skolemize_CLIM2";
  1038 val lemma_skolemize_CLIM2 = thm "lemma_skolemize_CLIM2";
  1034 val lemma_csimp = thm "lemma_csimp";
  1039 val lemma_csimp = thm "lemma_csimp";
  1035 val NSCLIM_CLIM = thm "NSCLIM_CLIM";
  1040 val NSCLIM_CLIM = thm "NSCLIM_CLIM";
  1036 val CLIM_NSCLIM_iff = thm "CLIM_NSCLIM_iff";
  1041 val CLIM_NSCLIM_iff = thm "CLIM_NSCLIM_iff";