| author | hoelzl | 
| Fri, 22 Mar 2013 10:41:43 +0100 | |
| changeset 51481 | ef949192e5d6 | 
| parent 51377 | 7da251a6c16e | 
| child 51956 | a4d81cdebf8b | 
| permissions | -rw-r--r-- | 
| 47455 | 1 | (* Title: HOL/Library/Quotient_Set.thy | 
| 44413 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 2 | Author: Cezary Kaliszyk and Christian Urban | 
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 3 | *) | 
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 4 | |
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 5 | header {* Quotient infrastructure for the set type *}
 | 
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 6 | |
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 7 | theory Quotient_Set | 
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 8 | imports Main Quotient_Syntax | 
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 9 | begin | 
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 10 | |
| 47648 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 11 | subsection {* Relator for set type *}
 | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 12 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 13 | definition set_rel :: "('a \<Rightarrow> 'b \<Rightarrow> bool) \<Rightarrow> 'a set \<Rightarrow> 'b set \<Rightarrow> bool"
 | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 14 | where "set_rel R = (\<lambda>A B. (\<forall>x\<in>A. \<exists>y\<in>B. R x y) \<and> (\<forall>y\<in>B. \<exists>x\<in>A. R x y))" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 15 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 16 | lemma set_relI: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 17 | assumes "\<And>x. x \<in> A \<Longrightarrow> \<exists>y\<in>B. R x y" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 18 | assumes "\<And>y. y \<in> B \<Longrightarrow> \<exists>x\<in>A. R x y" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 19 | shows "set_rel R A B" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 20 | using assms unfolding set_rel_def by simp | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 21 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 22 | lemma set_rel_conversep: "set_rel (conversep R) = conversep (set_rel R)" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 23 | unfolding set_rel_def by auto | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 24 | |
| 51377 | 25 | lemma set_rel_eq [relator_eq]: "set_rel (op =) = (op =)" | 
| 26 | unfolding set_rel_def fun_eq_iff by auto | |
| 27 | ||
| 28 | lemma set_rel_mono[relator_mono]: | |
| 29 | assumes "A \<le> B" | |
| 30 | shows "set_rel A \<le> set_rel B" | |
| 31 | using assms unfolding set_rel_def by blast | |
| 32 | ||
| 33 | lemma set_rel_OO[relator_distr]: "set_rel R OO set_rel S = set_rel (R OO S)" | |
| 34 | apply (rule sym) | |
| 47648 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 35 | apply (intro ext, rename_tac X Z) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 36 | apply (rule iffI) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 37 |   apply (rule_tac b="{y. (\<exists>x\<in>X. R x y) \<and> (\<exists>z\<in>Z. S y z)}" in relcomppI)
 | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 38 | apply (simp add: set_rel_def, fast) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 39 | apply (simp add: set_rel_def, fast) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 40 | apply (simp add: set_rel_def, fast) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 41 | done | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 42 | |
| 47982 
7aa35601ff65
prove reflexivity also for the quotient composition relation; reflp_preserve renamed to reflexivity_rule
 kuncar parents: 
47936diff
changeset | 43 | lemma reflp_set_rel[reflexivity_rule]: "reflp R \<Longrightarrow> reflp (set_rel R)" | 
| 47648 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 44 | unfolding reflp_def set_rel_def by fast | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 45 | |
| 47982 
7aa35601ff65
prove reflexivity also for the quotient composition relation; reflp_preserve renamed to reflexivity_rule
 kuncar parents: 
47936diff
changeset | 46 | lemma left_total_set_rel[reflexivity_rule]: | 
| 
7aa35601ff65
prove reflexivity also for the quotient composition relation; reflp_preserve renamed to reflexivity_rule
 kuncar parents: 
47936diff
changeset | 47 | assumes lt_R: "left_total R" | 
| 
7aa35601ff65
prove reflexivity also for the quotient composition relation; reflp_preserve renamed to reflexivity_rule
 kuncar parents: 
47936diff
changeset | 48 | shows "left_total (set_rel R)" | 
| 
7aa35601ff65
prove reflexivity also for the quotient composition relation; reflp_preserve renamed to reflexivity_rule
 kuncar parents: 
47936diff
changeset | 49 | proof - | 
| 
7aa35601ff65
prove reflexivity also for the quotient composition relation; reflp_preserve renamed to reflexivity_rule
 kuncar parents: 
47936diff
changeset | 50 |   {
 | 
| 
7aa35601ff65
prove reflexivity also for the quotient composition relation; reflp_preserve renamed to reflexivity_rule
 kuncar parents: 
47936diff
changeset | 51 | fix A | 
| 
7aa35601ff65
prove reflexivity also for the quotient composition relation; reflp_preserve renamed to reflexivity_rule
 kuncar parents: 
47936diff
changeset | 52 |     let ?B = "{y. \<exists>x \<in> A. R x y}"
 | 
| 
7aa35601ff65
prove reflexivity also for the quotient composition relation; reflp_preserve renamed to reflexivity_rule
 kuncar parents: 
47936diff
changeset | 53 | have "(\<forall>x\<in>A. \<exists>y\<in>?B. R x y) \<and> (\<forall>y\<in>?B. \<exists>x\<in>A. R x y)" using lt_R by(elim left_totalE) blast | 
| 
7aa35601ff65
prove reflexivity also for the quotient composition relation; reflp_preserve renamed to reflexivity_rule
 kuncar parents: 
47936diff
changeset | 54 | } | 
| 
7aa35601ff65
prove reflexivity also for the quotient composition relation; reflp_preserve renamed to reflexivity_rule
 kuncar parents: 
47936diff
changeset | 55 | then have "\<And>A. \<exists>B. (\<forall>x\<in>A. \<exists>y\<in>B. R x y) \<and> (\<forall>y\<in>B. \<exists>x\<in>A. R x y)" by blast | 
| 
7aa35601ff65
prove reflexivity also for the quotient composition relation; reflp_preserve renamed to reflexivity_rule
 kuncar parents: 
47936diff
changeset | 56 | then show ?thesis by (auto simp: set_rel_def intro: left_totalI) | 
| 
7aa35601ff65
prove reflexivity also for the quotient composition relation; reflp_preserve renamed to reflexivity_rule
 kuncar parents: 
47936diff
changeset | 57 | qed | 
| 
7aa35601ff65
prove reflexivity also for the quotient composition relation; reflp_preserve renamed to reflexivity_rule
 kuncar parents: 
47936diff
changeset | 58 | |
| 47648 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 59 | lemma symp_set_rel: "symp R \<Longrightarrow> symp (set_rel R)" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 60 | unfolding symp_def set_rel_def by fast | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 61 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 62 | lemma transp_set_rel: "transp R \<Longrightarrow> transp (set_rel R)" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 63 | unfolding transp_def set_rel_def by fast | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 64 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 65 | lemma equivp_set_rel: "equivp R \<Longrightarrow> equivp (set_rel R)" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 66 | by (blast intro: equivpI reflp_set_rel symp_set_rel transp_set_rel | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 67 | elim: equivpE) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 68 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 69 | lemma right_total_set_rel [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 70 | "right_total A \<Longrightarrow> right_total (set_rel A)" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 71 | unfolding right_total_def set_rel_def | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 72 |   by (rule allI, rename_tac Y, rule_tac x="{x. \<exists>y\<in>Y. A x y}" in exI, fast)
 | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 73 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 74 | lemma right_unique_set_rel [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 75 | "right_unique A \<Longrightarrow> right_unique (set_rel A)" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 76 | unfolding right_unique_def set_rel_def by fast | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 77 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 78 | lemma bi_total_set_rel [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 79 | "bi_total A \<Longrightarrow> bi_total (set_rel A)" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 80 | unfolding bi_total_def set_rel_def | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 81 | apply safe | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 82 |   apply (rename_tac X, rule_tac x="{y. \<exists>x\<in>X. A x y}" in exI, fast)
 | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 83 |   apply (rename_tac Y, rule_tac x="{x. \<exists>y\<in>Y. A x y}" in exI, fast)
 | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 84 | done | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 85 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 86 | lemma bi_unique_set_rel [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 87 | "bi_unique A \<Longrightarrow> bi_unique (set_rel A)" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 88 | unfolding bi_unique_def set_rel_def by fast | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 89 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 90 | subsection {* Transfer rules for transfer package *}
 | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 91 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 92 | subsubsection {* Unconditional transfer rules *}
 | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 93 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 94 | lemma empty_transfer [transfer_rule]: "(set_rel A) {} {}"
 | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 95 | unfolding set_rel_def by simp | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 96 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 97 | lemma insert_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 98 | "(A ===> set_rel A ===> set_rel A) insert insert" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 99 | unfolding fun_rel_def set_rel_def by auto | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 100 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 101 | lemma union_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 102 | "(set_rel A ===> set_rel A ===> set_rel A) union union" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 103 | unfolding fun_rel_def set_rel_def by auto | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 104 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 105 | lemma Union_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 106 | "(set_rel (set_rel A) ===> set_rel A) Union Union" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 107 | unfolding fun_rel_def set_rel_def by simp fast | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 108 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 109 | lemma image_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 110 | "((A ===> B) ===> set_rel A ===> set_rel B) image image" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 111 | unfolding fun_rel_def set_rel_def by simp fast | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 112 | |
| 47660 | 113 | lemma UNION_transfer [transfer_rule]: | 
| 114 | "(set_rel A ===> (A ===> set_rel B) ===> set_rel B) UNION UNION" | |
| 115 | unfolding SUP_def [abs_def] by transfer_prover | |
| 116 | ||
| 47648 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 117 | lemma Ball_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 118 | "(set_rel A ===> (A ===> op =) ===> op =) Ball Ball" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 119 | unfolding set_rel_def fun_rel_def by fast | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 120 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 121 | lemma Bex_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 122 | "(set_rel A ===> (A ===> op =) ===> op =) Bex Bex" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 123 | unfolding set_rel_def fun_rel_def by fast | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 124 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 125 | lemma Pow_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 126 | "(set_rel A ===> set_rel (set_rel A)) Pow Pow" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 127 | apply (rule fun_relI, rename_tac X Y, rule set_relI) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 128 |   apply (rename_tac X', rule_tac x="{y\<in>Y. \<exists>x\<in>X'. A x y}" in rev_bexI, clarsimp)
 | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 129 | apply (simp add: set_rel_def, fast) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 130 |   apply (rename_tac Y', rule_tac x="{x\<in>X. \<exists>y\<in>Y'. A x y}" in rev_bexI, clarsimp)
 | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 131 | apply (simp add: set_rel_def, fast) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 132 | done | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 133 | |
| 47922 | 134 | lemma set_rel_transfer [transfer_rule]: | 
| 135 | "((A ===> B ===> op =) ===> set_rel A ===> set_rel B ===> op =) | |
| 136 | set_rel set_rel" | |
| 137 | unfolding fun_rel_def set_rel_def by fast | |
| 138 | ||
| 47648 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 139 | subsubsection {* Rules requiring bi-unique or bi-total relations *}
 | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 140 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 141 | lemma member_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 142 | assumes "bi_unique A" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 143 | shows "(A ===> set_rel A ===> op =) (op \<in>) (op \<in>)" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 144 | using assms unfolding fun_rel_def set_rel_def bi_unique_def by fast | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 145 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 146 | lemma Collect_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 147 | assumes "bi_total A" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 148 | shows "((A ===> op =) ===> set_rel A) Collect Collect" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 149 | using assms unfolding fun_rel_def set_rel_def bi_total_def by fast | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 150 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 151 | lemma inter_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 152 | assumes "bi_unique A" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 153 | shows "(set_rel A ===> set_rel A ===> set_rel A) inter inter" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 154 | using assms unfolding fun_rel_def set_rel_def bi_unique_def by fast | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 155 | |
| 47680 | 156 | lemma Diff_transfer [transfer_rule]: | 
| 157 | assumes "bi_unique A" | |
| 158 | shows "(set_rel A ===> set_rel A ===> set_rel A) (op -) (op -)" | |
| 159 | using assms unfolding fun_rel_def set_rel_def bi_unique_def | |
| 160 | unfolding Ball_def Bex_def Diff_eq | |
| 161 | by (safe, simp, metis, simp, metis) | |
| 162 | ||
| 47648 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 163 | lemma subset_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 164 | assumes [transfer_rule]: "bi_unique A" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 165 | shows "(set_rel A ===> set_rel A ===> op =) (op \<subseteq>) (op \<subseteq>)" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 166 | unfolding subset_eq [abs_def] by transfer_prover | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 167 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 168 | lemma UNIV_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 169 | assumes "bi_total A" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 170 | shows "(set_rel A) UNIV UNIV" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 171 | using assms unfolding set_rel_def bi_total_def by simp | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 172 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 173 | lemma Compl_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 174 | assumes [transfer_rule]: "bi_unique A" and [transfer_rule]: "bi_total A" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 175 | shows "(set_rel A ===> set_rel A) uminus uminus" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 176 | unfolding Compl_eq [abs_def] by transfer_prover | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 177 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 178 | lemma Inter_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 179 | assumes [transfer_rule]: "bi_unique A" and [transfer_rule]: "bi_total A" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 180 | shows "(set_rel (set_rel A) ===> set_rel A) Inter Inter" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 181 | unfolding Inter_eq [abs_def] by transfer_prover | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 182 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 183 | lemma finite_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 184 | assumes "bi_unique A" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 185 | shows "(set_rel A ===> op =) finite finite" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 186 | apply (rule fun_relI, rename_tac X Y) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 187 | apply (rule iffI) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 188 | apply (subgoal_tac "Y \<subseteq> (\<lambda>x. THE y. A x y) ` X") | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 189 | apply (erule finite_subset, erule finite_imageI) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 190 | apply (rule subsetI, rename_tac y) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 191 | apply (clarsimp simp add: set_rel_def) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 192 | apply (drule (1) bspec, clarify) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 193 | apply (rule image_eqI) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 194 | apply (rule the_equality [symmetric]) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 195 | apply assumption | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 196 | apply (simp add: assms [unfolded bi_unique_def]) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 197 | apply assumption | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 198 | apply (subgoal_tac "X \<subseteq> (\<lambda>y. THE x. A x y) ` Y") | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 199 | apply (erule finite_subset, erule finite_imageI) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 200 | apply (rule subsetI, rename_tac x) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 201 | apply (clarsimp simp add: set_rel_def) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 202 | apply (drule (1) bspec, clarify) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 203 | apply (rule image_eqI) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 204 | apply (rule the_equality [symmetric]) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 205 | apply assumption | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 206 | apply (simp add: assms [unfolded bi_unique_def]) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 207 | apply assumption | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 208 | done | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 209 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 210 | subsection {* Setup for lifting package *}
 | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 211 | |
| 47777 
f29e7dcd7c40
use a quot_map theorem attribute instead of the complicated map attribute
 kuncar parents: 
47680diff
changeset | 212 | lemma Quotient_set[quot_map]: | 
| 47648 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 213 | assumes "Quotient R Abs Rep T" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 214 | shows "Quotient (set_rel R) (image Abs) (image Rep) (set_rel T)" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 215 | using assms unfolding Quotient_alt_def4 | 
| 51377 | 216 | apply (simp add: set_rel_OO[symmetric] set_rel_conversep) | 
| 47648 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 217 | apply (simp add: set_rel_def, fast) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 218 | done | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 219 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 220 | lemma set_invariant_commute [invariant_commute]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 221 | "set_rel (Lifting.invariant P) = Lifting.invariant (\<lambda>A. Ball A P)" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 222 | unfolding fun_eq_iff set_rel_def Lifting.invariant_def Ball_def by fast | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 223 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 224 | subsection {* Contravariant set map (vimage) and set relator *}
 | 
| 47626 
f7b1034cb9ce
move definition of set_rel into Library/Quotient_Set.thy
 huffman parents: 
47455diff
changeset | 225 | |
| 47647 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 226 | definition "vset_rel R xs ys \<equiv> \<forall>x y. R x y \<longrightarrow> x \<in> xs \<longleftrightarrow> y \<in> ys" | 
| 47626 
f7b1034cb9ce
move definition of set_rel into Library/Quotient_Set.thy
 huffman parents: 
47455diff
changeset | 227 | |
| 47647 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 228 | lemma vset_rel_eq [id_simps]: | 
| 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 229 | "vset_rel op = = op =" | 
| 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 230 | by (subst fun_eq_iff, subst fun_eq_iff) (simp add: set_eq_iff vset_rel_def) | 
| 47626 
f7b1034cb9ce
move definition of set_rel into Library/Quotient_Set.thy
 huffman parents: 
47455diff
changeset | 231 | |
| 47647 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 232 | lemma vset_rel_equivp: | 
| 47626 
f7b1034cb9ce
move definition of set_rel into Library/Quotient_Set.thy
 huffman parents: 
47455diff
changeset | 233 | assumes e: "equivp R" | 
| 47647 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 234 | shows "vset_rel R xs ys \<longleftrightarrow> xs = ys \<and> (\<forall>x y. x \<in> xs \<longrightarrow> R x y \<longrightarrow> y \<in> xs)" | 
| 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 235 | unfolding vset_rel_def | 
| 47626 
f7b1034cb9ce
move definition of set_rel into Library/Quotient_Set.thy
 huffman parents: 
47455diff
changeset | 236 | using equivp_reflp[OF e] | 
| 
f7b1034cb9ce
move definition of set_rel into Library/Quotient_Set.thy
 huffman parents: 
47455diff
changeset | 237 | by auto (metis, metis equivp_symp[OF e]) | 
| 
f7b1034cb9ce
move definition of set_rel into Library/Quotient_Set.thy
 huffman parents: 
47455diff
changeset | 238 | |
| 44413 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 239 | lemma set_quotient [quot_thm]: | 
| 47308 | 240 | assumes "Quotient3 R Abs Rep" | 
| 47647 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 241 | shows "Quotient3 (vset_rel R) (vimage Rep) (vimage Abs)" | 
| 47308 | 242 | proof (rule Quotient3I) | 
| 243 | from assms have "\<And>x. Abs (Rep x) = x" by (rule Quotient3_abs_rep) | |
| 44413 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 244 | then show "\<And>xs. Rep -` (Abs -` xs) = xs" | 
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 245 | unfolding vimage_def by auto | 
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 246 | next | 
| 47647 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 247 | show "\<And>xs. vset_rel R (Abs -` xs) (Abs -` xs)" | 
| 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 248 | unfolding vset_rel_def vimage_def | 
| 47308 | 249 | by auto (metis Quotient3_rel_abs[OF assms])+ | 
| 44413 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 250 | next | 
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 251 | fix r s | 
| 47647 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 252 | show "vset_rel R r s = (vset_rel R r r \<and> vset_rel R s s \<and> Rep -` r = Rep -` s)" | 
| 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 253 | unfolding vset_rel_def vimage_def set_eq_iff | 
| 47308 | 254 | by auto (metis rep_abs_rsp[OF assms] assms[simplified Quotient3_def])+ | 
| 44413 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 255 | qed | 
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 256 | |
| 47647 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 257 | declare [[mapQ3 set = (vset_rel, set_quotient)]] | 
| 47094 | 258 | |
| 44413 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 259 | lemma empty_set_rsp[quot_respect]: | 
| 47647 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 260 |   "vset_rel R {} {}"
 | 
| 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 261 | unfolding vset_rel_def by simp | 
| 44413 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 262 | |
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 263 | lemma collect_rsp[quot_respect]: | 
| 47308 | 264 | assumes "Quotient3 R Abs Rep" | 
| 47647 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 265 | shows "((R ===> op =) ===> vset_rel R) Collect Collect" | 
| 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 266 | by (intro fun_relI) (simp add: fun_rel_def vset_rel_def) | 
| 44413 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 267 | |
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 268 | lemma collect_prs[quot_preserve]: | 
| 47308 | 269 | assumes "Quotient3 R Abs Rep" | 
| 44413 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 270 | shows "((Abs ---> id) ---> op -` Rep) Collect = Collect" | 
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 271 | unfolding fun_eq_iff | 
| 47308 | 272 | by (simp add: Quotient3_abs_rep[OF assms]) | 
| 44413 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 273 | |
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 274 | lemma union_rsp[quot_respect]: | 
| 47308 | 275 | assumes "Quotient3 R Abs Rep" | 
| 47647 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 276 | shows "(vset_rel R ===> vset_rel R ===> vset_rel R) op \<union> op \<union>" | 
| 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 277 | by (intro fun_relI) (simp add: vset_rel_def) | 
| 44413 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 278 | |
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 279 | lemma union_prs[quot_preserve]: | 
| 47308 | 280 | assumes "Quotient3 R Abs Rep" | 
| 44413 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 281 | shows "(op -` Abs ---> op -` Abs ---> op -` Rep) op \<union> = op \<union>" | 
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 282 | unfolding fun_eq_iff | 
| 47308 | 283 | by (simp add: Quotient3_abs_rep[OF set_quotient[OF assms]]) | 
| 44413 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 284 | |
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 285 | lemma diff_rsp[quot_respect]: | 
| 47308 | 286 | assumes "Quotient3 R Abs Rep" | 
| 47647 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 287 | shows "(vset_rel R ===> vset_rel R ===> vset_rel R) op - op -" | 
| 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 288 | by (intro fun_relI) (simp add: vset_rel_def) | 
| 44413 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 289 | |
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 290 | lemma diff_prs[quot_preserve]: | 
| 47308 | 291 | assumes "Quotient3 R Abs Rep" | 
| 44413 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 292 | shows "(op -` Abs ---> op -` Abs ---> op -` Rep) op - = op -" | 
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 293 | unfolding fun_eq_iff | 
| 47308 | 294 | by (simp add: Quotient3_abs_rep[OF set_quotient[OF assms]] vimage_Diff) | 
| 44413 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 295 | |
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 296 | lemma inter_rsp[quot_respect]: | 
| 47308 | 297 | assumes "Quotient3 R Abs Rep" | 
| 47647 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 298 | shows "(vset_rel R ===> vset_rel R ===> vset_rel R) op \<inter> op \<inter>" | 
| 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 299 | by (intro fun_relI) (auto simp add: vset_rel_def) | 
| 44413 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 300 | |
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 301 | lemma inter_prs[quot_preserve]: | 
| 47308 | 302 | assumes "Quotient3 R Abs Rep" | 
| 44413 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 303 | shows "(op -` Abs ---> op -` Abs ---> op -` Rep) op \<inter> = op \<inter>" | 
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 304 | unfolding fun_eq_iff | 
| 47308 | 305 | by (simp add: Quotient3_abs_rep[OF set_quotient[OF assms]]) | 
| 44413 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 306 | |
| 44459 
079ccfb074d9
Quotient Package: add mem_rsp, mem_prs, tune proofs.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
44413diff
changeset | 307 | lemma mem_prs[quot_preserve]: | 
| 47308 | 308 | assumes "Quotient3 R Abs Rep" | 
| 44459 
079ccfb074d9
Quotient Package: add mem_rsp, mem_prs, tune proofs.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
44413diff
changeset | 309 | shows "(Rep ---> op -` Abs ---> id) op \<in> = op \<in>" | 
| 47308 | 310 | by (simp add: fun_eq_iff Quotient3_abs_rep[OF assms]) | 
| 44459 
079ccfb074d9
Quotient Package: add mem_rsp, mem_prs, tune proofs.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
44413diff
changeset | 311 | |
| 45970 
b6d0cff57d96
adjusted to set/pred distinction by means of type constructor `set`
 haftmann parents: 
44873diff
changeset | 312 | lemma mem_rsp[quot_respect]: | 
| 47647 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 313 | shows "(R ===> vset_rel R ===> op =) op \<in> op \<in>" | 
| 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 314 | by (intro fun_relI) (simp add: vset_rel_def) | 
| 44459 
079ccfb074d9
Quotient Package: add mem_rsp, mem_prs, tune proofs.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
44413diff
changeset | 315 | |
| 44413 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 316 | end |