equal
deleted
inserted
replaced
159 by (etac (apply_inverse RS trans) 1); |
159 by (etac (apply_inverse RS trans) 1); |
160 by (REPEAT (eresolve_tac [asm_rl,major] 1)); |
160 by (REPEAT (eresolve_tac [asm_rl,major] 1)); |
161 qed "inj_on_inverseI"; |
161 qed "inj_on_inverseI"; |
162 val inj_inverseI = inj_on_inverseI; (*for compatibility*) |
162 val inj_inverseI = inj_on_inverseI; (*for compatibility*) |
163 |
163 |
|
164 Goal "(inj f) = (inv f o f = id)"; |
|
165 by (asm_simp_tac (simpset() addsimps [o_def, expand_fun_eq]) 1); |
|
166 by (blast_tac (claset() addIs [inj_inverseI, inv_f_f]) 1); |
|
167 qed "inj_iff"; |
|
168 |
164 Goalw [inj_on_def] "[| inj_on f A; f(x)=f(y); x:A; y:A |] ==> x=y"; |
169 Goalw [inj_on_def] "[| inj_on f A; f(x)=f(y); x:A; y:A |] ==> x=y"; |
165 by (Blast_tac 1); |
170 by (Blast_tac 1); |
166 qed "inj_onD"; |
171 qed "inj_onD"; |
167 |
172 |
168 Goal "[| inj_on f A; x:A; y:A |] ==> (f(x)=f(y)) = (x=y)"; |
173 Goal "[| inj_on f A; x:A; y:A |] ==> (f(x)=f(y)) = (x=y)"; |
227 qed "inj_on_inv"; |
232 qed "inj_on_inv"; |
228 |
233 |
229 Goal "surj f ==> inj (inv f)"; |
234 Goal "surj f ==> inj (inv f)"; |
230 by (asm_simp_tac (simpset() addsimps [inj_on_inv, surj_range]) 1); |
235 by (asm_simp_tac (simpset() addsimps [inj_on_inv, surj_range]) 1); |
231 qed "surj_imp_inj_inv"; |
236 qed "surj_imp_inj_inv"; |
|
237 |
|
238 Goal "(surj f) = (f o inv f = id)"; |
|
239 by (asm_simp_tac (simpset() addsimps [o_def, expand_fun_eq]) 1); |
|
240 by (blast_tac (claset() addIs [surjI, surj_f_inv_f]) 1); |
|
241 qed "surj_iff"; |
232 |
242 |
233 |
243 |
234 (** Bijections **) |
244 (** Bijections **) |
235 |
245 |
236 Goalw [bij_def] "[| inj f; surj f |] ==> bij f"; |
246 Goalw [bij_def] "[| inj f; surj f |] ==> bij f"; |