src/HOL/Library/FuncSet.thy
changeset 39198 f967a16dfcdd
parent 38656 d5d342611edb
child 39302 d7728f65b353
equal deleted inserted replaced
39166:19efc2af3e6c 39198:f967a16dfcdd
   126 by (simp add: Pi_def compose_def restrict_def)
   126 by (simp add: Pi_def compose_def restrict_def)
   127 
   127 
   128 lemma compose_assoc:
   128 lemma compose_assoc:
   129     "[| f \<in> A -> B; g \<in> B -> C; h \<in> C -> D |]
   129     "[| f \<in> A -> B; g \<in> B -> C; h \<in> C -> D |]
   130       ==> compose A h (compose A g f) = compose A (compose B h g) f"
   130       ==> compose A h (compose A g f) = compose A (compose B h g) f"
   131 by (simp add: expand_fun_eq Pi_def compose_def restrict_def)
   131 by (simp add: ext_iff Pi_def compose_def restrict_def)
   132 
   132 
   133 lemma compose_eq: "x \<in> A ==> compose A g f x = g(f(x))"
   133 lemma compose_eq: "x \<in> A ==> compose A g f x = g(f(x))"
   134 by (simp add: compose_def restrict_def)
   134 by (simp add: compose_def restrict_def)
   135 
   135 
   136 lemma surj_compose: "[| f ` A = B; g ` B = C |] ==> compose A g f ` A = C"
   136 lemma surj_compose: "[| f ` A = B; g ` B = C |] ==> compose A g f ` A = C"
   149     "(\<lambda>y\<in>A. f y) x = (if x \<in> A then f x else undefined)"
   149     "(\<lambda>y\<in>A. f y) x = (if x \<in> A then f x else undefined)"
   150   by (simp add: restrict_def)
   150   by (simp add: restrict_def)
   151 
   151 
   152 lemma restrict_ext:
   152 lemma restrict_ext:
   153     "(!!x. x \<in> A ==> f x = g x) ==> (\<lambda>x\<in>A. f x) = (\<lambda>x\<in>A. g x)"
   153     "(!!x. x \<in> A ==> f x = g x) ==> (\<lambda>x\<in>A. f x) = (\<lambda>x\<in>A. g x)"
   154   by (simp add: expand_fun_eq Pi_def restrict_def)
   154   by (simp add: ext_iff Pi_def restrict_def)
   155 
   155 
   156 lemma inj_on_restrict_eq [simp]: "inj_on (restrict f A) A = inj_on f A"
   156 lemma inj_on_restrict_eq [simp]: "inj_on (restrict f A) A = inj_on f A"
   157   by (simp add: inj_on_def restrict_def)
   157   by (simp add: inj_on_def restrict_def)
   158 
   158 
   159 lemma Id_compose:
   159 lemma Id_compose:
   160     "[|f \<in> A -> B;  f \<in> extensional A|] ==> compose A (\<lambda>y\<in>B. y) f = f"
   160     "[|f \<in> A -> B;  f \<in> extensional A|] ==> compose A (\<lambda>y\<in>B. y) f = f"
   161   by (auto simp add: expand_fun_eq compose_def extensional_def Pi_def)
   161   by (auto simp add: ext_iff compose_def extensional_def Pi_def)
   162 
   162 
   163 lemma compose_Id:
   163 lemma compose_Id:
   164     "[|g \<in> A -> B;  g \<in> extensional A|] ==> compose A g (\<lambda>x\<in>A. x) = g"
   164     "[|g \<in> A -> B;  g \<in> extensional A|] ==> compose A g (\<lambda>x\<in>A. x) = g"
   165   by (auto simp add: expand_fun_eq compose_def extensional_def Pi_def)
   165   by (auto simp add: ext_iff compose_def extensional_def Pi_def)
   166 
   166 
   167 lemma image_restrict_eq [simp]: "(restrict f A) ` A = f ` A"
   167 lemma image_restrict_eq [simp]: "(restrict f A) ` A = f ` A"
   168   by (auto simp add: restrict_def)
   168   by (auto simp add: restrict_def)
   169 
   169 
   170 
   170 
   203 by (simp add: compose_def)
   203 by (simp add: compose_def)
   204 
   204 
   205 lemma extensionalityI:
   205 lemma extensionalityI:
   206   "[| f \<in> extensional A; g \<in> extensional A;
   206   "[| f \<in> extensional A; g \<in> extensional A;
   207       !!x. x\<in>A ==> f x = g x |] ==> f = g"
   207       !!x. x\<in>A ==> f x = g x |] ==> f = g"
   208 by (force simp add: expand_fun_eq extensional_def)
   208 by (force simp add: ext_iff extensional_def)
   209 
   209 
   210 lemma inv_into_funcset: "f ` A = B ==> (\<lambda>x\<in>B. inv_into A f x) : B -> A"
   210 lemma inv_into_funcset: "f ` A = B ==> (\<lambda>x\<in>B. inv_into A f x) : B -> A"
   211 by (unfold inv_into_def) (fast intro: someI2)
   211 by (unfold inv_into_def) (fast intro: someI2)
   212 
   212 
   213 lemma compose_inv_into_id:
   213 lemma compose_inv_into_id: