src/HOL/Library/Countable_Set_Type.thy
changeset 61424 c3658c18b7bc
parent 60679 ade12ef2773c
child 61585 a9599d3d7610
equal deleted inserted replaced
61423:9b6a0fb85fa3 61424:c3658c18b7bc
   562 "(\<forall>t \<in> rcset a. \<exists>u \<in> rcset b. R t u) \<and> (\<forall>t \<in> rcset b. \<exists>u \<in> rcset a. R u t) \<longleftrightarrow>
   562 "(\<forall>t \<in> rcset a. \<exists>u \<in> rcset b. R t u) \<and> (\<forall>t \<in> rcset b. \<exists>u \<in> rcset a. R u t) \<longleftrightarrow>
   563  ((BNF_Def.Grp {x. rcset x \<subseteq> {(a, b). R a b}} (cimage fst))\<inverse>\<inverse> OO
   563  ((BNF_Def.Grp {x. rcset x \<subseteq> {(a, b). R a b}} (cimage fst))\<inverse>\<inverse> OO
   564    BNF_Def.Grp {x. rcset x \<subseteq> {(a, b). R a b}} (cimage snd)) a b" (is "?L = ?R")
   564    BNF_Def.Grp {x. rcset x \<subseteq> {(a, b). R a b}} (cimage snd)) a b" (is "?L = ?R")
   565 proof
   565 proof
   566   assume ?L
   566   assume ?L
   567   def R' \<equiv> "the_inv rcset (Collect (split R) \<inter> (rcset a \<times> rcset b))"
   567   def R' \<equiv> "the_inv rcset (Collect (case_prod R) \<inter> (rcset a \<times> rcset b))"
   568   (is "the_inv rcset ?L'")
   568   (is "the_inv rcset ?L'")
   569   have L: "countable ?L'" by auto
   569   have L: "countable ?L'" by auto
   570   hence *: "rcset R' = ?L'" unfolding R'_def by (intro rcset_to_rcset)
   570   hence *: "rcset R' = ?L'" unfolding R'_def by (intro rcset_to_rcset)
   571   thus ?R unfolding Grp_def relcompp.simps conversep.simps including cset.lifting
   571   thus ?R unfolding Grp_def relcompp.simps conversep.simps including cset.lifting
   572   proof (intro CollectI case_prodI exI[of _ a] exI[of _ b] exI[of _ R'] conjI refl)
   572   proof (intro CollectI case_prodI exI[of _ a] exI[of _ b] exI[of _ R'] conjI refl)
   605   show "rel_cset R OO rel_cset S \<le> rel_cset (R OO S)"
   605   show "rel_cset R OO rel_cset S \<le> rel_cset (R OO S)"
   606     unfolding rel_cset_alt_def[abs_def] by fast
   606     unfolding rel_cset_alt_def[abs_def] by fast
   607 next
   607 next
   608   fix R
   608   fix R
   609   show "rel_cset R =
   609   show "rel_cset R =
   610         (BNF_Def.Grp {x. rcset x \<subseteq> Collect (split R)} (cimage fst))\<inverse>\<inverse> OO
   610         (BNF_Def.Grp {x. rcset x \<subseteq> Collect (case_prod R)} (cimage fst))\<inverse>\<inverse> OO
   611          BNF_Def.Grp {x. rcset x \<subseteq> Collect (split R)} (cimage snd)"
   611          BNF_Def.Grp {x. rcset x \<subseteq> Collect (case_prod R)} (cimage snd)"
   612   unfolding rel_cset_alt_def[abs_def] rel_cset_aux by simp
   612   unfolding rel_cset_alt_def[abs_def] rel_cset_aux by simp
   613 qed(simp add: bot_cset.rep_eq)
   613 qed(simp add: bot_cset.rep_eq)
   614 
   614 
   615 end
   615 end