src/HOL/Hyperreal/NatStar.ML
changeset 10834 a7897aebbffc
parent 10797 028d22926a41
child 10919 144ede948e58
equal deleted inserted replaced
10833:c0844a30ea4e 10834:a7897aebbffc
   115           "a : A ==> hypnat_of_nat a : *sNat* A";
   115           "a : A ==> hypnat_of_nat a : *sNat* A";
   116 by (auto_tac (claset() addIs [FreeUltrafilterNat_subset],
   116 by (auto_tac (claset() addIs [FreeUltrafilterNat_subset],
   117          simpset()));
   117          simpset()));
   118 qed "NatStar_mem";
   118 qed "NatStar_mem";
   119 
   119 
   120 Goalw [starsetNat_def] "hypnat_of_nat `` A <= *sNat* A";
   120 Goalw [starsetNat_def] "hypnat_of_nat ` A <= *sNat* A";
   121 by (auto_tac (claset(), simpset() addsimps [hypnat_of_nat_def]));
   121 by (auto_tac (claset(), simpset() addsimps [hypnat_of_nat_def]));
   122 by (blast_tac (claset() addIs [FreeUltrafilterNat_subset]) 1);
   122 by (blast_tac (claset() addIs [FreeUltrafilterNat_subset]) 1);
   123 qed "NatStar_hypreal_of_real_image_subset";
   123 qed "NatStar_hypreal_of_real_image_subset";
   124 
   124 
   125 Goal "SNat <= *sNat* (UNIV:: nat set)";
   125 Goal "SNat <= *sNat* (UNIV:: nat set)";
   126 by (simp_tac (simpset() addsimps [SHNat_hypnat_of_nat_iff,
   126 by (simp_tac (simpset() addsimps [SHNat_hypnat_of_nat_iff,
   127                           NatStar_hypreal_of_real_image_subset]) 1);
   127                           NatStar_hypreal_of_real_image_subset]) 1);
   128 qed "NatStar_SHNat_subset";
   128 qed "NatStar_SHNat_subset";
   129 
   129 
   130 Goalw [starsetNat_def] 
   130 Goalw [starsetNat_def] 
   131      "*sNat* X Int SNat = hypnat_of_nat `` X";
   131      "*sNat* X Int SNat = hypnat_of_nat ` X";
   132 by (auto_tac (claset(),
   132 by (auto_tac (claset(),
   133          simpset() addsimps 
   133          simpset() addsimps 
   134            [hypnat_of_nat_def,SHNat_def]));
   134            [hypnat_of_nat_def,SHNat_def]));
   135 by (fold_tac [hypnat_of_nat_def]);
   135 by (fold_tac [hypnat_of_nat_def]);
   136 by (rtac imageI 1 THEN rtac ccontr 1);
   136 by (rtac imageI 1 THEN rtac ccontr 1);
   138 by (rtac lemma_hypnatrel_refl 1);
   138 by (rtac lemma_hypnatrel_refl 1);
   139 by (blast_tac (claset() addIs [FreeUltrafilterNat_subset]) 2);
   139 by (blast_tac (claset() addIs [FreeUltrafilterNat_subset]) 2);
   140 by (Auto_tac);
   140 by (Auto_tac);
   141 qed "NatStar_hypreal_of_real_Int";
   141 qed "NatStar_hypreal_of_real_Int";
   142 
   142 
   143 Goal "x ~: hypnat_of_nat `` A ==> ALL y: A. x ~= hypnat_of_nat y";
   143 Goal "x ~: hypnat_of_nat ` A ==> ALL y: A. x ~= hypnat_of_nat y";
   144 by (Auto_tac);
   144 by (Auto_tac);
   145 qed "lemma_not_hypnatA";
   145 qed "lemma_not_hypnatA";
   146 
   146 
   147 Goalw [starsetNat_n_def,starsetNat_def] "*sNat* X = *sNatn* (%n. X)";
   147 Goalw [starsetNat_n_def,starsetNat_def] "*sNat* X = *sNatn* (%n. X)";
   148 by Auto_tac;
   148 by Auto_tac;
   186      "ALL n. (F n = f) ==> *fNat2n* F = *fNat2* f";
   186      "ALL n. (F n = f) ==> *fNat2n* F = *fNat2* f";
   187 by (Auto_tac);
   187 by (Auto_tac);
   188 qed "starfunNat2_n_starfunNat2";
   188 qed "starfunNat2_n_starfunNat2";
   189 
   189 
   190 Goalw [congruent_def] 
   190 Goalw [congruent_def] 
   191       "congruent hypnatrel (%X. hypnatrel```{%n. f (X n)})";
   191       "congruent hypnatrel (%X. hypnatrel``{%n. f (X n)})";
   192 by (safe_tac (claset()));
   192 by (safe_tac (claset()));
   193 by (ALLGOALS(Fuf_tac));
   193 by (ALLGOALS(Fuf_tac));
   194 qed "starfunNat_congruent";
   194 qed "starfunNat_congruent";
   195 
   195 
   196 (* f::nat=>real *)
   196 (* f::nat=>real *)
   197 Goalw [starfunNat_def]
   197 Goalw [starfunNat_def]
   198       "(*fNat* f) (Abs_hypnat(hypnatrel```{%n. X n})) = \
   198       "(*fNat* f) (Abs_hypnat(hypnatrel``{%n. X n})) = \
   199 \      Abs_hypreal(hyprel ``` {%n. f (X n)})";
   199 \      Abs_hypreal(hyprel `` {%n. f (X n)})";
   200 by (res_inst_tac [("f","Abs_hypreal")] arg_cong 1);
   200 by (res_inst_tac [("f","Abs_hypreal")] arg_cong 1);
   201 by (simp_tac (simpset() addsimps 
   201 by (simp_tac (simpset() addsimps 
   202    [hyprel_in_hypreal RS Abs_hypreal_inverse]) 1);
   202    [hyprel_in_hypreal RS Abs_hypreal_inverse]) 1);
   203 by (Auto_tac THEN Fuf_tac 1);
   203 by (Auto_tac THEN Fuf_tac 1);
   204 qed "starfunNat";
   204 qed "starfunNat";
   205 
   205 
   206 (* f::nat=>nat *)
   206 (* f::nat=>nat *)
   207 Goalw [starfunNat2_def]
   207 Goalw [starfunNat2_def]
   208       "(*fNat2* f) (Abs_hypnat(hypnatrel```{%n. X n})) = \
   208       "(*fNat2* f) (Abs_hypnat(hypnatrel``{%n. X n})) = \
   209 \      Abs_hypnat(hypnatrel ``` {%n. f (X n)})";
   209 \      Abs_hypnat(hypnatrel `` {%n. f (X n)})";
   210 by (res_inst_tac [("f","Abs_hypnat")] arg_cong 1);
   210 by (res_inst_tac [("f","Abs_hypnat")] arg_cong 1);
   211 by (simp_tac (simpset() addsimps 
   211 by (simp_tac (simpset() addsimps 
   212    [hypnatrel_in_hypnat RS Abs_hypnat_inverse,
   212    [hypnatrel_in_hypnat RS Abs_hypnat_inverse,
   213     [equiv_hypnatrel, starfunNat_congruent] MRS UN_equiv_class]) 1);
   213     [equiv_hypnatrel, starfunNat_congruent] MRS UN_equiv_class]) 1);
   214 qed "starfunNat2";
   214 qed "starfunNat2";
   411 
   411 
   412 (*----------------------------------------------------------
   412 (*----------------------------------------------------------
   413      Internal functions - some redundancy with *fNat* now
   413      Internal functions - some redundancy with *fNat* now
   414  ---------------------------------------------------------*)
   414  ---------------------------------------------------------*)
   415 Goalw [congruent_def] 
   415 Goalw [congruent_def] 
   416       "congruent hypnatrel (%X. hypnatrel```{%n. f n (X n)})";
   416       "congruent hypnatrel (%X. hypnatrel``{%n. f n (X n)})";
   417 by (safe_tac (claset()));
   417 by (safe_tac (claset()));
   418 by (ALLGOALS(Fuf_tac));
   418 by (ALLGOALS(Fuf_tac));
   419 qed "starfunNat_n_congruent";
   419 qed "starfunNat_n_congruent";
   420 
   420 
   421 Goalw [starfunNat_n_def]
   421 Goalw [starfunNat_n_def]
   422      "(*fNatn* f) (Abs_hypnat(hypnatrel```{%n. X n})) = \
   422      "(*fNatn* f) (Abs_hypnat(hypnatrel``{%n. X n})) = \
   423 \     Abs_hypreal(hyprel ``` {%n. f n (X n)})";
   423 \     Abs_hypreal(hyprel `` {%n. f n (X n)})";
   424 by (res_inst_tac [("f","Abs_hypreal")] arg_cong 1);
   424 by (res_inst_tac [("f","Abs_hypreal")] arg_cong 1);
   425 by Auto_tac;
   425 by Auto_tac;
   426 by (Ultra_tac 1);
   426 by (Ultra_tac 1);
   427 qed "starfunNat_n";
   427 qed "starfunNat_n";
   428 
   428 
   466 Goal "- (*fNatn* f) x = (*fNatn* (%i x. - (f i) x)) x";
   466 Goal "- (*fNatn* f) x = (*fNatn* (%i x. - (f i) x)) x";
   467 by (res_inst_tac [("z","x")] eq_Abs_hypnat 1);
   467 by (res_inst_tac [("z","x")] eq_Abs_hypnat 1);
   468 by (auto_tac (claset(), simpset() addsimps [starfunNat_n, hypreal_minus]));
   468 by (auto_tac (claset(), simpset() addsimps [starfunNat_n, hypreal_minus]));
   469 qed "starfunNat_n_minus";
   469 qed "starfunNat_n_minus";
   470 
   470 
   471 Goal "(*fNatn* f) (hypnat_of_nat n) = Abs_hypreal(hyprel ``` {%i. f i n})";
   471 Goal "(*fNatn* f) (hypnat_of_nat n) = Abs_hypreal(hyprel `` {%i. f i n})";
   472 by (auto_tac (claset(), simpset() addsimps [starfunNat_n,hypnat_of_nat_def]));
   472 by (auto_tac (claset(), simpset() addsimps [starfunNat_n,hypnat_of_nat_def]));
   473 qed "starfunNat_n_eq";
   473 qed "starfunNat_n_eq";
   474 Addsimps [starfunNat_n_eq];
   474 Addsimps [starfunNat_n_eq];
   475 
   475 
   476 Goal "((*fNat* f) = (*fNat* g)) = (f = g)";
   476 Goal "((*fNat* f) = (*fNat* g)) = (f = g)";