src/HOL/Fun.thy
changeset 15303 eedbb8d22ca2
parent 15140 322485b816ac
child 15439 71c0f98e31f1
equal deleted inserted replaced
15302:a643fcbc3468 15303:eedbb8d22ca2
   156 
   156 
   157 lemma comp_inj_on:
   157 lemma comp_inj_on:
   158      "[| inj_on f A;  inj_on g (f`A) |] ==> inj_on (g o f) A"
   158      "[| inj_on f A;  inj_on g (f`A) |] ==> inj_on (g o f) A"
   159 by (simp add: comp_def inj_on_def)
   159 by (simp add: comp_def inj_on_def)
   160 
   160 
       
   161 lemma inj_on_imageI: "inj_on (g o f) A \<Longrightarrow> inj_on g (f ` A)"
       
   162 apply(simp add:inj_on_def image_def)
       
   163 apply blast
       
   164 done
       
   165 
   161 lemma inj_on_contraD: "[| inj_on f A;  ~x=y;  x:A;  y:A |] ==> ~ f(x)=f(y)"
   166 lemma inj_on_contraD: "[| inj_on f A;  ~x=y;  x:A;  y:A |] ==> ~ f(x)=f(y)"
   162 by (unfold inj_on_def, blast)
   167 by (unfold inj_on_def, blast)
   163 
   168 
   164 lemma inj_singleton: "inj (%s. {s})"
   169 lemma inj_singleton: "inj (%s. {s})"
   165 by (simp add: inj_on_def)
   170 by (simp add: inj_on_def)
   166 
   171 
   167 lemma inj_on_empty[iff]: "inj_on f {}"
   172 lemma inj_on_empty[iff]: "inj_on f {}"
   168 by(simp add: inj_on_def)
   173 by(simp add: inj_on_def)
   169 
   174 
   170 lemma subset_inj_on: "[| A<=B; inj_on f B |] ==> inj_on f A"
   175 lemma subset_inj_on: "[| inj_on f B; A <= B |] ==> inj_on f A"
   171 by (unfold inj_on_def, blast)
   176 by (unfold inj_on_def, blast)
   172 
   177 
   173 lemma inj_on_Un:
   178 lemma inj_on_Un:
   174  "inj_on f (A Un B) =
   179  "inj_on f (A Un B) =
   175   (inj_on f A & inj_on f B & f`(A-B) Int f`(B-A) = {})"
   180   (inj_on f A & inj_on f B & f`(A-B) Int f`(B-A) = {})"
   361 lemma fun_upd_upd [simp]: "f(x:=y,x:=z) = f(x:=z)"
   366 lemma fun_upd_upd [simp]: "f(x:=y,x:=z) = f(x:=z)"
   362 by (simp add: expand_fun_eq)
   367 by (simp add: expand_fun_eq)
   363 
   368 
   364 lemma fun_upd_twist: "a ~= c ==> (m(a:=b))(c:=d) = (m(c:=d))(a:=b)"
   369 lemma fun_upd_twist: "a ~= c ==> (m(a:=b))(c:=d) = (m(c:=d))(a:=b)"
   365 by (rule ext, auto)
   370 by (rule ext, auto)
       
   371 
       
   372 lemma inj_on_fun_updI: "\<lbrakk> inj_on f A; y \<notin> f`A \<rbrakk> \<Longrightarrow> inj_on (f(x:=y)) A"
       
   373 by(fastsimp simp:inj_on_def image_def)
   366 
   374 
   367 subsection{* overwrite *}
   375 subsection{* overwrite *}
   368 
   376 
   369 lemma overwrite_emptyset[simp]: "f(g|{}) = f"
   377 lemma overwrite_emptyset[simp]: "f(g|{}) = f"
   370 by(simp add:overwrite_def)
   378 by(simp add:overwrite_def)