fun_rel introduction and list_rel elimination for quotient package
authorCezary Kaliszyk <kaliszyk@in.tum.de>
Thu, 22 Apr 2010 11:55:19 +0200
changeset 36276 92011cc923f5
parent 36275 c6ca9e258269
child 36277 9be4ab2acc13
child 36278 6b330b1fa0c0
fun_rel introduction and list_rel elimination for quotient package
src/HOL/Library/Quotient_List.thy
src/HOL/Quotient.thy
--- a/src/HOL/Library/Quotient_List.thy	Thu Apr 22 09:30:39 2010 +0200
+++ b/src/HOL/Library/Quotient_List.thy	Thu Apr 22 11:55:19 2010 +0200
@@ -271,6 +271,15 @@
   apply(simp_all)
   done
 
+lemma list_rel_find_element:
+  assumes a: "x \<in> set a"
+  and b: "list_rel R a b"
+  shows "\<exists>y. (y \<in> set b \<and> R x y)"
+proof -
+  have "length a = length b" using b by (rule list_rel_len)
+  then show ?thesis using a b by (induct a b rule: list_induct2) auto
+qed
+
 lemma list_rel_refl:
   assumes a: "\<And>x y. R x y = (R x = R y)"
   shows "list_rel R x x"
--- a/src/HOL/Quotient.thy	Thu Apr 22 09:30:39 2010 +0200
+++ b/src/HOL/Quotient.thy	Thu Apr 22 11:55:19 2010 +0200
@@ -106,6 +106,10 @@
 where
 [simp]: "fun_rel E1 E2 f g = (\<forall>x y. E1 x y \<longrightarrow> E2 (f x) (g y))"
 
+lemma fun_relI [intro]:
+  assumes "\<And>a b. P a b \<Longrightarrow> Q (x a) (y b)"
+  shows "(P ===> Q) x y"
+  using assms by (simp add: fun_rel_def)
 
 lemma fun_map_id:
   shows "(id ---> id) = id"