src/HOL/Fun.ML
changeset 8285 16216dbe4f20
parent 8258 666d3a4f3b9d
child 8309 a054d5c98b21
equal deleted inserted replaced
8284:95c022a866ca 8285:16216dbe4f20
   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";