| author | wenzelm | 
| Fri, 01 Jun 2012 13:02:09 +0200 | |
| changeset 48056 | 396749e9daaf | 
| parent 47982 | 7aa35601ff65 | 
| child 51377 | 7da251a6c16e | 
| 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 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 25 | lemma set_rel_OO: "set_rel (R OO S) = set_rel R OO set_rel S" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 26 | apply (intro ext, rename_tac X Z) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 27 | apply (rule iffI) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 28 |   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 | 29 | apply (simp add: set_rel_def, fast) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 30 | apply (simp add: set_rel_def, fast) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 31 | apply (simp add: set_rel_def, fast) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 32 | done | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 33 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 34 | lemma set_rel_eq [relator_eq]: "set_rel (op =) = (op =)" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 35 | unfolding set_rel_def fun_eq_iff by auto | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 36 | |
| 47982 
7aa35601ff65
prove reflexivity also for the quotient composition relation; reflp_preserve renamed to reflexivity_rule
 kuncar parents: 
47936diff
changeset | 37 | 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 | 38 | unfolding reflp_def set_rel_def by fast | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 39 | |
| 47982 
7aa35601ff65
prove reflexivity also for the quotient composition relation; reflp_preserve renamed to reflexivity_rule
 kuncar parents: 
47936diff
changeset | 40 | 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 | 41 | 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 | 42 | 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 | 43 | proof - | 
| 
7aa35601ff65
prove reflexivity also for the quotient composition relation; reflp_preserve renamed to reflexivity_rule
 kuncar parents: 
47936diff
changeset | 44 |   {
 | 
| 
7aa35601ff65
prove reflexivity also for the quotient composition relation; reflp_preserve renamed to reflexivity_rule
 kuncar parents: 
47936diff
changeset | 45 | fix A | 
| 
7aa35601ff65
prove reflexivity also for the quotient composition relation; reflp_preserve renamed to reflexivity_rule
 kuncar parents: 
47936diff
changeset | 46 |     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 | 47 | 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 | 48 | } | 
| 
7aa35601ff65
prove reflexivity also for the quotient composition relation; reflp_preserve renamed to reflexivity_rule
 kuncar parents: 
47936diff
changeset | 49 | 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 | 50 | 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 | 51 | qed | 
| 
7aa35601ff65
prove reflexivity also for the quotient composition relation; reflp_preserve renamed to reflexivity_rule
 kuncar parents: 
47936diff
changeset | 52 | |
| 47648 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 53 | 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 | 54 | unfolding symp_def set_rel_def by fast | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 55 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 56 | 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 | 57 | unfolding transp_def set_rel_def by fast | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 58 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 59 | 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 | 60 | 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 | 61 | elim: equivpE) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 62 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 63 | lemma right_total_set_rel [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 64 | "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 | 65 | unfolding right_total_def set_rel_def | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 66 |   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 | 67 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 68 | lemma right_unique_set_rel [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 69 | "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 | 70 | 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 | 71 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 72 | lemma bi_total_set_rel [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 73 | "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 | 74 | unfolding bi_total_def set_rel_def | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 75 | apply safe | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 76 |   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 | 77 |   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 | 78 | done | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 79 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 80 | lemma bi_unique_set_rel [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 81 | "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 | 82 | 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 | 83 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 84 | subsection {* Transfer rules for transfer package *}
 | 
| 
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 | subsubsection {* Unconditional transfer rules *}
 | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 87 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 88 | lemma empty_transfer [transfer_rule]: "(set_rel A) {} {}"
 | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 89 | unfolding set_rel_def by simp | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 90 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 91 | lemma insert_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 92 | "(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 | 93 | 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 | 94 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 95 | lemma union_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 96 | "(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 | 97 | 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 | 98 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 99 | lemma Union_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 100 | "(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 | 101 | 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 | 102 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 103 | lemma image_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 104 | "((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 | 105 | 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 | 106 | |
| 47660 | 107 | lemma UNION_transfer [transfer_rule]: | 
| 108 | "(set_rel A ===> (A ===> set_rel B) ===> set_rel B) UNION UNION" | |
| 109 | unfolding SUP_def [abs_def] by transfer_prover | |
| 110 | ||
| 47648 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 111 | lemma Ball_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 112 | "(set_rel A ===> (A ===> op =) ===> op =) Ball Ball" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 113 | 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 | 114 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 115 | lemma Bex_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 116 | "(set_rel A ===> (A ===> op =) ===> op =) Bex Bex" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 117 | 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 | 118 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 119 | lemma Pow_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 120 | "(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 | 121 | 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 | 122 |   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 | 123 | apply (simp add: set_rel_def, fast) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 124 |   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 | 125 | apply (simp add: set_rel_def, fast) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 126 | done | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 127 | |
| 47922 | 128 | lemma set_rel_transfer [transfer_rule]: | 
| 129 | "((A ===> B ===> op =) ===> set_rel A ===> set_rel B ===> op =) | |
| 130 | set_rel set_rel" | |
| 131 | unfolding fun_rel_def set_rel_def by fast | |
| 132 | ||
| 47648 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 133 | 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 | 134 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 135 | lemma member_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 136 | assumes "bi_unique A" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 137 | 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 | 138 | 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 | 139 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 140 | lemma Collect_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 141 | assumes "bi_total A" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 142 | shows "((A ===> op =) ===> set_rel A) Collect Collect" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 143 | 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 | 144 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 145 | lemma inter_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 146 | assumes "bi_unique A" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 147 | 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 | 148 | 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 | 149 | |
| 47680 | 150 | lemma Diff_transfer [transfer_rule]: | 
| 151 | assumes "bi_unique A" | |
| 152 | shows "(set_rel A ===> set_rel A ===> set_rel A) (op -) (op -)" | |
| 153 | using assms unfolding fun_rel_def set_rel_def bi_unique_def | |
| 154 | unfolding Ball_def Bex_def Diff_eq | |
| 155 | by (safe, simp, metis, simp, metis) | |
| 156 | ||
| 47648 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 157 | lemma subset_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 158 | assumes [transfer_rule]: "bi_unique A" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 159 | 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 | 160 | unfolding subset_eq [abs_def] by transfer_prover | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 161 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 162 | lemma UNIV_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 163 | assumes "bi_total A" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 164 | shows "(set_rel A) UNIV UNIV" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 165 | 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 | 166 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 167 | lemma Compl_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 168 | 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 | 169 | 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 | 170 | unfolding Compl_eq [abs_def] by transfer_prover | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 171 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 172 | lemma Inter_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 173 | 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 | 174 | 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 | 175 | unfolding Inter_eq [abs_def] by transfer_prover | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 176 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 177 | lemma finite_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 178 | assumes "bi_unique A" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 179 | shows "(set_rel A ===> op =) finite finite" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 180 | apply (rule fun_relI, rename_tac X Y) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 181 | apply (rule iffI) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 182 | 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 | 183 | apply (erule finite_subset, erule finite_imageI) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 184 | apply (rule subsetI, rename_tac y) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 185 | apply (clarsimp simp add: set_rel_def) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 186 | apply (drule (1) bspec, clarify) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 187 | apply (rule image_eqI) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 188 | apply (rule the_equality [symmetric]) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 189 | apply assumption | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 190 | apply (simp add: assms [unfolded bi_unique_def]) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 191 | apply assumption | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 192 | 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 | 193 | apply (erule finite_subset, erule finite_imageI) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 194 | apply (rule subsetI, rename_tac x) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 195 | apply (clarsimp simp add: set_rel_def) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 196 | apply (drule (1) bspec, clarify) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 197 | apply (rule image_eqI) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 198 | apply (rule the_equality [symmetric]) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 199 | apply assumption | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 200 | apply (simp add: assms [unfolded bi_unique_def]) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 201 | apply assumption | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 202 | done | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 203 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 204 | subsection {* Setup for lifting package *}
 | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 205 | |
| 47777 
f29e7dcd7c40
use a quot_map theorem attribute instead of the complicated map attribute
 kuncar parents: 
47680diff
changeset | 206 | lemma Quotient_set[quot_map]: | 
| 47648 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 207 | assumes "Quotient R Abs Rep T" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 208 | 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 | 209 | using assms unfolding Quotient_alt_def4 | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 210 | apply (simp add: set_rel_OO set_rel_conversep) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 211 | apply (simp add: set_rel_def, fast) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 212 | done | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 213 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 214 | lemma set_invariant_commute [invariant_commute]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 215 | "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 | 216 | 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 | 217 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 218 | subsection {* Contravariant set map (vimage) and set relator *}
 | 
| 47626 
f7b1034cb9ce
move definition of set_rel into Library/Quotient_Set.thy
 huffman parents: 
47455diff
changeset | 219 | |
| 47647 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 220 | 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 | 221 | |
| 47647 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 222 | 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 | 223 | "vset_rel op = = op =" | 
| 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 224 | 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 | 225 | |
| 47647 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 226 | lemma vset_rel_equivp: | 
| 47626 
f7b1034cb9ce
move definition of set_rel into Library/Quotient_Set.thy
 huffman parents: 
47455diff
changeset | 227 | 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 | 228 | 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 | 229 | unfolding vset_rel_def | 
| 47626 
f7b1034cb9ce
move definition of set_rel into Library/Quotient_Set.thy
 huffman parents: 
47455diff
changeset | 230 | using equivp_reflp[OF e] | 
| 
f7b1034cb9ce
move definition of set_rel into Library/Quotient_Set.thy
 huffman parents: 
47455diff
changeset | 231 | by auto (metis, metis equivp_symp[OF e]) | 
| 
f7b1034cb9ce
move definition of set_rel into Library/Quotient_Set.thy
 huffman parents: 
47455diff
changeset | 232 | |
| 44413 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 233 | lemma set_quotient [quot_thm]: | 
| 47308 | 234 | 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 | 235 | shows "Quotient3 (vset_rel R) (vimage Rep) (vimage Abs)" | 
| 47308 | 236 | proof (rule Quotient3I) | 
| 237 | 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 | 238 | 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 | 239 | unfolding vimage_def by auto | 
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 240 | next | 
| 47647 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 241 | 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 | 242 | unfolding vset_rel_def vimage_def | 
| 47308 | 243 | 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 | 244 | next | 
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 245 | fix r s | 
| 47647 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 246 | 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 | 247 | unfolding vset_rel_def vimage_def set_eq_iff | 
| 47308 | 248 | 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 | 249 | qed | 
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 250 | |
| 47647 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 251 | declare [[mapQ3 set = (vset_rel, set_quotient)]] | 
| 47094 | 252 | |
| 44413 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 253 | 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 | 254 |   "vset_rel R {} {}"
 | 
| 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 255 | 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 | 256 | |
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 257 | lemma collect_rsp[quot_respect]: | 
| 47308 | 258 | 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 | 259 | 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 | 260 | 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 | 261 | |
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 262 | lemma collect_prs[quot_preserve]: | 
| 47308 | 263 | assumes "Quotient3 R Abs Rep" | 
| 44413 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 264 | 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 | 265 | unfolding fun_eq_iff | 
| 47308 | 266 | 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 | 267 | |
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 268 | lemma union_rsp[quot_respect]: | 
| 47308 | 269 | 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 | 270 | 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 | 271 | 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 | 272 | |
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 273 | lemma union_prs[quot_preserve]: | 
| 47308 | 274 | assumes "Quotient3 R Abs Rep" | 
| 44413 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 275 | 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 | 276 | unfolding fun_eq_iff | 
| 47308 | 277 | 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 | 278 | |
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 279 | lemma diff_rsp[quot_respect]: | 
| 47308 | 280 | 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 | 281 | 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 | 282 | 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 | 283 | |
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 284 | lemma diff_prs[quot_preserve]: | 
| 47308 | 285 | assumes "Quotient3 R Abs Rep" | 
| 44413 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 286 | 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 | 287 | unfolding fun_eq_iff | 
| 47308 | 288 | 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 | 289 | |
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 290 | lemma inter_rsp[quot_respect]: | 
| 47308 | 291 | 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 | 292 | 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 | 293 | 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 | 294 | |
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 295 | lemma inter_prs[quot_preserve]: | 
| 47308 | 296 | assumes "Quotient3 R Abs Rep" | 
| 44413 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 297 | 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 | 298 | unfolding fun_eq_iff | 
| 47308 | 299 | 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 | 300 | |
| 44459 
079ccfb074d9
Quotient Package: add mem_rsp, mem_prs, tune proofs.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
44413diff
changeset | 301 | lemma mem_prs[quot_preserve]: | 
| 47308 | 302 | 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 | 303 | shows "(Rep ---> op -` Abs ---> id) op \<in> = op \<in>" | 
| 47308 | 304 | 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 | 305 | |
| 45970 
b6d0cff57d96
adjusted to set/pred distinction by means of type constructor `set`
 haftmann parents: 
44873diff
changeset | 306 | 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 | 307 | 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 | 308 | 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 | 309 | |
| 44413 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 310 | end |