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)"; |