| author | huffman | 
| Sat, 21 Apr 2012 13:12:27 +0200 | |
| changeset 47652 | 1b722b100301 | 
| parent 47648 | 6b9d20a095ae | 
| child 47660 | 7a5c681c0265 | 
| 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 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 37 | lemma reflp_set_rel: "reflp R \<Longrightarrow> reflp (set_rel R)" | 
| 
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 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 40 | 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 | 41 | unfolding symp_def set_rel_def by fast | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 42 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 43 | 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 | 44 | unfolding transp_def set_rel_def by fast | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 45 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 46 | 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 | 47 | 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 | 48 | elim: equivpE) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 49 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 50 | lemma right_total_set_rel [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 51 | "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 | 52 | unfolding right_total_def set_rel_def | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 53 |   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 | 54 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 55 | lemma right_unique_set_rel [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 56 | "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 | 57 | 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 | 58 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 59 | lemma bi_total_set_rel [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 60 | "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 | 61 | unfolding bi_total_def set_rel_def | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 62 | apply safe | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 63 |   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 | 64 |   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 | 65 | done | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 66 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 67 | lemma bi_unique_set_rel [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 68 | "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 | 69 | 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 | 70 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 71 | subsection {* Transfer rules for transfer package *}
 | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 72 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 73 | subsubsection {* Unconditional transfer rules *}
 | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 74 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 75 | lemma empty_transfer [transfer_rule]: "(set_rel A) {} {}"
 | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 76 | unfolding set_rel_def by simp | 
| 
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 insert_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 79 | "(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 | 80 | 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 | 81 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 82 | lemma union_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 83 | "(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 | 84 | 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 | 85 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 86 | lemma Union_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 87 | "(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 | 88 | 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 | 89 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 90 | lemma image_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 91 | "((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 | 92 | 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 | 93 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 94 | lemma Ball_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 95 | "(set_rel A ===> (A ===> op =) ===> op =) Ball Ball" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 96 | 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 | 97 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 98 | lemma Bex_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 99 | "(set_rel A ===> (A ===> op =) ===> op =) Bex Bex" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 100 | 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 | 101 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 102 | lemma Pow_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 103 | "(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 | 104 | 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 | 105 |   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 | 106 | apply (simp add: set_rel_def, fast) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 107 |   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 | 108 | apply (simp add: set_rel_def, fast) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 109 | done | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 110 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 111 | 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 | 112 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 113 | lemma member_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 114 | assumes "bi_unique A" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 115 | 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 | 116 | 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 | 117 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 118 | lemma Collect_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 119 | assumes "bi_total A" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 120 | shows "((A ===> op =) ===> set_rel A) Collect Collect" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 121 | 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 | 122 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 123 | lemma inter_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 124 | assumes "bi_unique A" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 125 | 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 | 126 | 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 | 127 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 128 | lemma subset_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 129 | assumes [transfer_rule]: "bi_unique A" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 130 | 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 | 131 | unfolding subset_eq [abs_def] by transfer_prover | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 132 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 133 | lemma UNIV_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 134 | assumes "bi_total A" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 135 | shows "(set_rel A) UNIV UNIV" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 136 | 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 | 137 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 138 | lemma Compl_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 139 | 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 | 140 | 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 | 141 | unfolding Compl_eq [abs_def] by transfer_prover | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 142 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 143 | lemma Inter_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 144 | 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 | 145 | 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 | 146 | unfolding Inter_eq [abs_def] by transfer_prover | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 147 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 148 | lemma finite_transfer [transfer_rule]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 149 | assumes "bi_unique A" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 150 | shows "(set_rel A ===> op =) finite finite" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 151 | apply (rule fun_relI, rename_tac X Y) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 152 | apply (rule iffI) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 153 | 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 | 154 | apply (erule finite_subset, erule finite_imageI) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 155 | apply (rule subsetI, rename_tac y) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 156 | apply (clarsimp simp add: set_rel_def) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 157 | apply (drule (1) bspec, clarify) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 158 | apply (rule image_eqI) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 159 | apply (rule the_equality [symmetric]) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 160 | apply assumption | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 161 | apply (simp add: assms [unfolded bi_unique_def]) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 162 | apply assumption | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 163 | 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 | 164 | apply (erule finite_subset, erule finite_imageI) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 165 | apply (rule subsetI, rename_tac x) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 166 | apply (clarsimp simp add: set_rel_def) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 167 | apply (drule (1) bspec, clarify) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 168 | apply (rule image_eqI) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 169 | apply (rule the_equality [symmetric]) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 170 | apply assumption | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 171 | apply (simp add: assms [unfolded bi_unique_def]) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 172 | apply assumption | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 173 | done | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 174 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 175 | subsection {* Setup for lifting package *}
 | 
| 
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 Quotient_set: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 178 | assumes "Quotient R Abs Rep T" | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 179 | 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 | 180 | using assms unfolding Quotient_alt_def4 | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 181 | 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 | 182 | apply (simp add: set_rel_def, fast) | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 183 | done | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 184 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 185 | declare [[map set = (set_rel, Quotient_set)]] | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 186 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 187 | lemma set_invariant_commute [invariant_commute]: | 
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 188 | "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 | 189 | 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 | 190 | |
| 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 huffman parents: 
47647diff
changeset | 191 | subsection {* Contravariant set map (vimage) and set relator *}
 | 
| 47626 
f7b1034cb9ce
move definition of set_rel into Library/Quotient_Set.thy
 huffman parents: 
47455diff
changeset | 192 | |
| 47647 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 193 | 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 | 194 | |
| 47647 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 195 | 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 | 196 | "vset_rel op = = op =" | 
| 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 197 | 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 | 198 | |
| 47647 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 199 | lemma vset_rel_equivp: | 
| 47626 
f7b1034cb9ce
move definition of set_rel into Library/Quotient_Set.thy
 huffman parents: 
47455diff
changeset | 200 | 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 | 201 | 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 | 202 | unfolding vset_rel_def | 
| 47626 
f7b1034cb9ce
move definition of set_rel into Library/Quotient_Set.thy
 huffman parents: 
47455diff
changeset | 203 | using equivp_reflp[OF e] | 
| 
f7b1034cb9ce
move definition of set_rel into Library/Quotient_Set.thy
 huffman parents: 
47455diff
changeset | 204 | by auto (metis, metis equivp_symp[OF e]) | 
| 
f7b1034cb9ce
move definition of set_rel into Library/Quotient_Set.thy
 huffman parents: 
47455diff
changeset | 205 | |
| 44413 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 206 | lemma set_quotient [quot_thm]: | 
| 47308 | 207 | 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 | 208 | shows "Quotient3 (vset_rel R) (vimage Rep) (vimage Abs)" | 
| 47308 | 209 | proof (rule Quotient3I) | 
| 210 | 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 | 211 | 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 | 212 | unfolding vimage_def by auto | 
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 213 | next | 
| 47647 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 214 | 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 | 215 | unfolding vset_rel_def vimage_def | 
| 47308 | 216 | 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 | 217 | next | 
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 218 | fix r s | 
| 47647 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 219 | 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 | 220 | unfolding vset_rel_def vimage_def set_eq_iff | 
| 47308 | 221 | 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 | 222 | qed | 
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 223 | |
| 47647 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 224 | declare [[mapQ3 set = (vset_rel, set_quotient)]] | 
| 47094 | 225 | |
| 44413 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 226 | 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 | 227 |   "vset_rel R {} {}"
 | 
| 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 huffman parents: 
47626diff
changeset | 228 | 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 | 229 | |
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 230 | lemma collect_rsp[quot_respect]: | 
| 47308 | 231 | 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 | 232 | 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 | 233 | 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 | 234 | |
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 235 | lemma collect_prs[quot_preserve]: | 
| 47308 | 236 | assumes "Quotient3 R Abs Rep" | 
| 44413 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 237 | 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 | 238 | unfolding fun_eq_iff | 
| 47308 | 239 | 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 | 240 | |
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 241 | lemma union_rsp[quot_respect]: | 
| 47308 | 242 | 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 | 243 | 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 | 244 | 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 | 245 | |
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 246 | lemma union_prs[quot_preserve]: | 
| 47308 | 247 | assumes "Quotient3 R Abs Rep" | 
| 44413 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 248 | 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 | 249 | unfolding fun_eq_iff | 
| 47308 | 250 | 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 | 251 | |
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 252 | lemma diff_rsp[quot_respect]: | 
| 47308 | 253 | 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 | 254 | 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 | 255 | 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 | 256 | |
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 257 | lemma diff_prs[quot_preserve]: | 
| 47308 | 258 | assumes "Quotient3 R Abs Rep" | 
| 44413 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 259 | 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 | 260 | unfolding fun_eq_iff | 
| 47308 | 261 | 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 | 262 | |
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 263 | lemma inter_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 "(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 | 266 | 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 | 267 | |
| 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 268 | lemma inter_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 "(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 | 271 | unfolding fun_eq_iff | 
| 47308 | 272 | 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 | 273 | |
| 44459 
079ccfb074d9
Quotient Package: add mem_rsp, mem_prs, tune proofs.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
44413diff
changeset | 274 | lemma mem_prs[quot_preserve]: | 
| 47308 | 275 | 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 | 276 | shows "(Rep ---> op -` Abs ---> id) op \<in> = op \<in>" | 
| 47308 | 277 | 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 | 278 | |
| 45970 
b6d0cff57d96
adjusted to set/pred distinction by means of type constructor `set`
 haftmann parents: 
44873diff
changeset | 279 | 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 | 280 | 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 | 281 | 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 | 282 | |
| 44413 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 283 | end |