src/HOL/Hyperreal/Lim.thy
changeset 17318 bc1c75855f3d
parent 17298 ad73fb6144cf
child 19023 5652a536b7e8
equal deleted inserted replaced
17317:3f12de2e2e6e 17318:bc1c75855f3d
   224 text{*Standard and NS definitions of Limit*} (*NEEDS STRUCTURING*)
   224 text{*Standard and NS definitions of Limit*} (*NEEDS STRUCTURING*)
   225 lemma LIM_NSLIM:
   225 lemma LIM_NSLIM:
   226       "f -- x --> L ==> f -- x --NS> L"
   226       "f -- x --> L ==> f -- x --NS> L"
   227 apply (simp add: LIM_def NSLIM_def approx_def)
   227 apply (simp add: LIM_def NSLIM_def approx_def)
   228 apply (simp add: Infinitesimal_FreeUltrafilterNat_iff, safe)
   228 apply (simp add: Infinitesimal_FreeUltrafilterNat_iff, safe)
   229 apply (rule_tac z = xa in eq_Abs_star)
   229 apply (rule_tac x = xa in star_cases)
   230 apply (auto simp add: real_add_minus_iff starfun hypreal_minus hypreal_of_real_def star_of_def star_n_def hypreal_add)
   230 apply (auto simp add: real_add_minus_iff starfun star_n_minus star_of_def star_n_add star_n_eq_iff)
   231 apply (rule bexI, rule_tac [2] lemma_starrel_refl, clarify) 
   231 apply (rule bexI [OF _ Rep_star_star_n], clarify) 
   232 apply (drule_tac x = u in spec, clarify)
   232 apply (drule_tac x = u in spec, clarify)
   233 apply (drule_tac x = s in spec, clarify)
   233 apply (drule_tac x = s in spec, clarify)
   234 apply (subgoal_tac "\<forall>n::nat. (xa n) \<noteq> x & \<bar>(xa n) + - x\<bar> < s --> \<bar>f (xa n) + - L\<bar> < u")
   234 apply (subgoal_tac "\<forall>n::nat. (Xa n) \<noteq> x & \<bar>(Xa n) + - x\<bar> < s --> \<bar>f (Xa n) + - L\<bar> < u")
   235 prefer 2 apply blast
   235 prefer 2 apply blast
   236 apply (drule FreeUltrafilterNat_all, ultra)
   236 apply (drule FreeUltrafilterNat_all, ultra)
   237 done
   237 done
   238 
   238 
   239 
   239 
   268 apply (simp add: LIM_def NSLIM_def approx_def)
   268 apply (simp add: LIM_def NSLIM_def approx_def)
   269 apply (simp add: Infinitesimal_FreeUltrafilterNat_iff, clarify)
   269 apply (simp add: Infinitesimal_FreeUltrafilterNat_iff, clarify)
   270 apply (rule ccontr, simp)
   270 apply (rule ccontr, simp)
   271 apply (simp add: linorder_not_less)
   271 apply (simp add: linorder_not_less)
   272 apply (drule lemma_skolemize_LIM2, safe)
   272 apply (drule lemma_skolemize_LIM2, safe)
   273 apply (drule_tac x = "Abs_star (starrel``{X})" in spec)
   273 apply (drule_tac x = "star_n X" in spec)
   274 apply (auto simp add: starfun hypreal_minus hypreal_of_real_def star_of_def star_n_def hypreal_add)
   274 apply (auto simp add: starfun star_n_minus star_of_def star_n_add star_n_eq_iff)
   275 apply (drule lemma_simp [THEN real_seq_to_hypreal_Infinitesimal])
   275 apply (drule lemma_simp [THEN real_seq_to_hypreal_Infinitesimal])
   276 apply (simp add: Infinitesimal_FreeUltrafilterNat_iff hypreal_of_real_def star_of_def star_n_def hypreal_minus hypreal_add, blast)
   276 apply (simp add: Infinitesimal_FreeUltrafilterNat_iff star_of_def star_n_minus star_n_add star_n_eq_iff, blast)
   277 apply (drule spec, drule mp, assumption)
   277 apply (drule spec, drule mp, assumption)
   278 apply (drule FreeUltrafilterNat_all, ultra)
   278 apply (drule FreeUltrafilterNat_all, ultra)
   279 done
   279 done
   280 
   280 
   281 
   281 
   449 apply (drule_tac x = "hypreal_of_real a + x" in spec)
   449 apply (drule_tac x = "hypreal_of_real a + x" in spec)
   450 apply (drule_tac [2] x = "-hypreal_of_real a + x" in spec, safe, simp)
   450 apply (drule_tac [2] x = "-hypreal_of_real a + x" in spec, safe, simp)
   451 apply (rule mem_infmal_iff [THEN iffD2, THEN Infinitesimal_add_approx_self [THEN approx_sym]])
   451 apply (rule mem_infmal_iff [THEN iffD2, THEN Infinitesimal_add_approx_self [THEN approx_sym]])
   452 apply (rule_tac [4] approx_minus_iff2 [THEN iffD1])
   452 apply (rule_tac [4] approx_minus_iff2 [THEN iffD1])
   453  prefer 3 apply (simp add: add_commute)
   453  prefer 3 apply (simp add: add_commute)
   454 apply (rule_tac [2] z = x in eq_Abs_star)
   454 apply (rule_tac [2] x = x in star_cases)
   455 apply (rule_tac [4] z = x in eq_Abs_star)
   455 apply (rule_tac [4] x = x in star_cases)
   456 apply (auto simp add: starfun hypreal_of_real_def star_of_def star_n_def hypreal_minus hypreal_add add_assoc approx_refl hypreal_zero_def)
   456 apply (auto simp add: starfun star_of_def star_n_minus star_n_add add_assoc approx_refl star_n_zero_num)
   457 done
   457 done
   458 
   458 
   459 lemma NSLIM_isCont_iff: "(f -- a --NS> f a) = ((%h. f(a + h)) -- 0 --NS> f a)"
   459 lemma NSLIM_isCont_iff: "(f -- a --NS> f a) = ((%h. f(a + h)) -- 0 --NS> f a)"
   460 by (rule NSLIM_h_iff)
   460 by (rule NSLIM_h_iff)
   461 
   461 
   577 by (simp add: isUCont_def isCont_def LIM_def, meson)
   577 by (simp add: isUCont_def isCont_def LIM_def, meson)
   578 
   578 
   579 lemma isUCont_isNSUCont: "isUCont f ==> isNSUCont f"
   579 lemma isUCont_isNSUCont: "isUCont f ==> isNSUCont f"
   580 apply (simp add: isNSUCont_def isUCont_def approx_def)
   580 apply (simp add: isNSUCont_def isUCont_def approx_def)
   581 apply (simp add: Infinitesimal_FreeUltrafilterNat_iff, safe)
   581 apply (simp add: Infinitesimal_FreeUltrafilterNat_iff, safe)
   582 apply (rule_tac z = x in eq_Abs_star)
   582 apply (rule_tac x = x in star_cases)
   583 apply (rule_tac z = y in eq_Abs_star)
   583 apply (rule_tac x = y in star_cases)
   584 apply (auto simp add: starfun hypreal_minus hypreal_add)
   584 apply (auto simp add: starfun star_n_minus star_n_add)
   585 apply (rule bexI, rule_tac [2] lemma_starrel_refl, safe)
   585 apply (rule bexI [OF _ Rep_star_star_n], safe)
   586 apply (drule_tac x = u in spec, clarify)
   586 apply (drule_tac x = u in spec, clarify)
   587 apply (drule_tac x = s in spec, clarify)
   587 apply (drule_tac x = s in spec, clarify)
   588 apply (subgoal_tac "\<forall>n::nat. abs ((xa n) + - (xb n)) < s --> abs (f (xa n) + - f (xb n)) < u")
   588 apply (subgoal_tac "\<forall>n::nat. abs ((Xa n) + - (Xb n)) < s --> abs (f (Xa n) + - f (Xb n)) < u")
   589 prefer 2 apply blast
   589 prefer 2 apply blast
   590 apply (erule_tac V = "\<forall>x y. \<bar>x + - y\<bar> < s --> \<bar>f x + - f y\<bar> < u" in thin_rl)
   590 apply (erule_tac V = "\<forall>x y. \<bar>x + - y\<bar> < s --> \<bar>f x + - f y\<bar> < u" in thin_rl)
   591 apply (drule FreeUltrafilterNat_all, ultra)
   591 apply (drule FreeUltrafilterNat_all, ultra)
   592 done
   592 done
   593 
   593 
   618 apply (simp add: isNSUCont_def isUCont_def approx_def)
   618 apply (simp add: isNSUCont_def isUCont_def approx_def)
   619 apply (simp add: Infinitesimal_FreeUltrafilterNat_iff, safe)
   619 apply (simp add: Infinitesimal_FreeUltrafilterNat_iff, safe)
   620 apply (rule ccontr, simp)
   620 apply (rule ccontr, simp)
   621 apply (simp add: linorder_not_less)
   621 apply (simp add: linorder_not_less)
   622 apply (drule lemma_skolemize_LIM2u, safe)
   622 apply (drule lemma_skolemize_LIM2u, safe)
   623 apply (drule_tac x = "Abs_star (starrel``{X})" in spec)
   623 apply (drule_tac x = "star_n X" in spec)
   624 apply (drule_tac x = "Abs_star (starrel``{Y})" in spec)
   624 apply (drule_tac x = "star_n Y" in spec)
   625 apply (simp add: starfun hypreal_minus hypreal_add, auto)
   625 apply (simp add: starfun star_n_minus star_n_add, auto)
   626 apply (drule lemma_simpu [THEN real_seq_to_hypreal_Infinitesimal2])
   626 apply (drule lemma_simpu [THEN real_seq_to_hypreal_Infinitesimal2])
   627 apply (simp add: Infinitesimal_FreeUltrafilterNat_iff hypreal_minus hypreal_add, blast)
   627 apply (simp add: Infinitesimal_FreeUltrafilterNat_iff star_n_minus star_n_add, blast)
   628 apply (drule_tac x = r in spec, clarify)
   628 apply (drule_tac x = r in spec, clarify)
   629 apply (drule FreeUltrafilterNat_all, ultra)
   629 apply (drule FreeUltrafilterNat_all, ultra)
   630 done
   630 done
   631 
   631 
   632 text{*Derivatives*}
   632 text{*Derivatives*}