| author | wenzelm | 
| Fri, 14 Dec 2012 16:33:22 +0100 | |
| changeset 50530 | 6266e44b3396 | 
| 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: 
47647 
diff
changeset
 | 
11  | 
subsection {* Relator for set type *}
 | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
12  | 
|
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
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: 
47647 
diff
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: 
47647 
diff
changeset
 | 
15  | 
|
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
16  | 
lemma set_relI:  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
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: 
47647 
diff
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: 
47647 
diff
changeset
 | 
19  | 
shows "set_rel R A B"  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
20  | 
using assms unfolding set_rel_def by simp  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
21  | 
|
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
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: 
47647 
diff
changeset
 | 
23  | 
unfolding set_rel_def by auto  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
24  | 
|
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
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: 
47647 
diff
changeset
 | 
26  | 
apply (intro ext, rename_tac X Z)  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
27  | 
apply (rule iffI)  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
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: 
47647 
diff
changeset
 | 
29  | 
apply (simp add: set_rel_def, fast)  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
30  | 
apply (simp add: set_rel_def, fast)  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
31  | 
apply (simp add: set_rel_def, fast)  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
32  | 
done  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
33  | 
|
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
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: 
47647 
diff
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: 
47647 
diff
changeset
 | 
36  | 
|
| 
47982
 
7aa35601ff65
prove reflexivity also for the quotient composition relation; reflp_preserve renamed to reflexivity_rule
 
kuncar 
parents: 
47936 
diff
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: 
47647 
diff
changeset
 | 
38  | 
unfolding reflp_def set_rel_def by fast  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
39  | 
|
| 
47982
 
7aa35601ff65
prove reflexivity also for the quotient composition relation; reflp_preserve renamed to reflexivity_rule
 
kuncar 
parents: 
47936 
diff
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: 
47936 
diff
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: 
47936 
diff
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: 
47936 
diff
changeset
 | 
43  | 
proof -  | 
| 
 
7aa35601ff65
prove reflexivity also for the quotient composition relation; reflp_preserve renamed to reflexivity_rule
 
kuncar 
parents: 
47936 
diff
changeset
 | 
44  | 
  {
 | 
| 
 
7aa35601ff65
prove reflexivity also for the quotient composition relation; reflp_preserve renamed to reflexivity_rule
 
kuncar 
parents: 
47936 
diff
changeset
 | 
45  | 
fix A  | 
| 
 
7aa35601ff65
prove reflexivity also for the quotient composition relation; reflp_preserve renamed to reflexivity_rule
 
kuncar 
parents: 
47936 
diff
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: 
47936 
diff
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: 
47936 
diff
changeset
 | 
48  | 
}  | 
| 
 
7aa35601ff65
prove reflexivity also for the quotient composition relation; reflp_preserve renamed to reflexivity_rule
 
kuncar 
parents: 
47936 
diff
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: 
47936 
diff
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: 
47936 
diff
changeset
 | 
51  | 
qed  | 
| 
 
7aa35601ff65
prove reflexivity also for the quotient composition relation; reflp_preserve renamed to reflexivity_rule
 
kuncar 
parents: 
47936 
diff
changeset
 | 
52  | 
|
| 
47648
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
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: 
47647 
diff
changeset
 | 
54  | 
unfolding symp_def set_rel_def by fast  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
55  | 
|
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
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: 
47647 
diff
changeset
 | 
57  | 
unfolding transp_def set_rel_def by fast  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
58  | 
|
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
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: 
47647 
diff
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: 
47647 
diff
changeset
 | 
61  | 
elim: equivpE)  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
62  | 
|
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
63  | 
lemma right_total_set_rel [transfer_rule]:  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
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: 
47647 
diff
changeset
 | 
65  | 
unfolding right_total_def set_rel_def  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
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: 
47647 
diff
changeset
 | 
67  | 
|
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
68  | 
lemma right_unique_set_rel [transfer_rule]:  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
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: 
47647 
diff
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: 
47647 
diff
changeset
 | 
71  | 
|
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
72  | 
lemma bi_total_set_rel [transfer_rule]:  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
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: 
47647 
diff
changeset
 | 
74  | 
unfolding bi_total_def set_rel_def  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
75  | 
apply safe  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
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: 
47647 
diff
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: 
47647 
diff
changeset
 | 
78  | 
done  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
79  | 
|
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
80  | 
lemma bi_unique_set_rel [transfer_rule]:  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
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: 
47647 
diff
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: 
47647 
diff
changeset
 | 
83  | 
|
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
84  | 
subsection {* Transfer rules for transfer package *}
 | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
85  | 
|
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
86  | 
subsubsection {* Unconditional transfer rules *}
 | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
87  | 
|
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
88  | 
lemma empty_transfer [transfer_rule]: "(set_rel A) {} {}"
 | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
89  | 
unfolding set_rel_def by simp  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
90  | 
|
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
91  | 
lemma insert_transfer [transfer_rule]:  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
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: 
47647 
diff
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: 
47647 
diff
changeset
 | 
94  | 
|
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
95  | 
lemma union_transfer [transfer_rule]:  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
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: 
47647 
diff
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: 
47647 
diff
changeset
 | 
98  | 
|
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
99  | 
lemma Union_transfer [transfer_rule]:  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
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: 
47647 
diff
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: 
47647 
diff
changeset
 | 
102  | 
|
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
103  | 
lemma image_transfer [transfer_rule]:  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
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: 
47647 
diff
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: 
47647 
diff
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: 
47647 
diff
changeset
 | 
111  | 
lemma Ball_transfer [transfer_rule]:  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
112  | 
"(set_rel A ===> (A ===> op =) ===> op =) Ball Ball"  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
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: 
47647 
diff
changeset
 | 
114  | 
|
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
115  | 
lemma Bex_transfer [transfer_rule]:  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
116  | 
"(set_rel A ===> (A ===> op =) ===> op =) Bex Bex"  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
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: 
47647 
diff
changeset
 | 
118  | 
|
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
119  | 
lemma Pow_transfer [transfer_rule]:  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
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: 
47647 
diff
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: 
47647 
diff
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: 
47647 
diff
changeset
 | 
123  | 
apply (simp add: set_rel_def, fast)  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
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: 
47647 
diff
changeset
 | 
125  | 
apply (simp add: set_rel_def, fast)  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
126  | 
done  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
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: 
47647 
diff
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: 
47647 
diff
changeset
 | 
134  | 
|
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
135  | 
lemma member_transfer [transfer_rule]:  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
136  | 
assumes "bi_unique A"  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
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: 
47647 
diff
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: 
47647 
diff
changeset
 | 
139  | 
|
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
140  | 
lemma Collect_transfer [transfer_rule]:  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
141  | 
assumes "bi_total A"  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
142  | 
shows "((A ===> op =) ===> set_rel A) Collect Collect"  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
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: 
47647 
diff
changeset
 | 
144  | 
|
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
145  | 
lemma inter_transfer [transfer_rule]:  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
146  | 
assumes "bi_unique A"  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
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: 
47647 
diff
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: 
47647 
diff
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: 
47647 
diff
changeset
 | 
157  | 
lemma subset_transfer [transfer_rule]:  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
158  | 
assumes [transfer_rule]: "bi_unique A"  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
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: 
47647 
diff
changeset
 | 
160  | 
unfolding subset_eq [abs_def] by transfer_prover  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
161  | 
|
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
162  | 
lemma UNIV_transfer [transfer_rule]:  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
163  | 
assumes "bi_total A"  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
164  | 
shows "(set_rel A) UNIV UNIV"  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
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: 
47647 
diff
changeset
 | 
166  | 
|
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
167  | 
lemma Compl_transfer [transfer_rule]:  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
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: 
47647 
diff
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: 
47647 
diff
changeset
 | 
170  | 
unfolding Compl_eq [abs_def] by transfer_prover  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
171  | 
|
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
172  | 
lemma Inter_transfer [transfer_rule]:  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
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: 
47647 
diff
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: 
47647 
diff
changeset
 | 
175  | 
unfolding Inter_eq [abs_def] by transfer_prover  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
176  | 
|
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
177  | 
lemma finite_transfer [transfer_rule]:  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
178  | 
assumes "bi_unique A"  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
179  | 
shows "(set_rel A ===> op =) finite finite"  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
180  | 
apply (rule fun_relI, rename_tac X Y)  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
181  | 
apply (rule iffI)  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
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: 
47647 
diff
changeset
 | 
183  | 
apply (erule finite_subset, erule finite_imageI)  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
184  | 
apply (rule subsetI, rename_tac y)  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
185  | 
apply (clarsimp simp add: set_rel_def)  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
186  | 
apply (drule (1) bspec, clarify)  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
187  | 
apply (rule image_eqI)  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
188  | 
apply (rule the_equality [symmetric])  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
189  | 
apply assumption  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
190  | 
apply (simp add: assms [unfolded bi_unique_def])  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
191  | 
apply assumption  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
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: 
47647 
diff
changeset
 | 
193  | 
apply (erule finite_subset, erule finite_imageI)  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
194  | 
apply (rule subsetI, rename_tac x)  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
195  | 
apply (clarsimp simp add: set_rel_def)  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
196  | 
apply (drule (1) bspec, clarify)  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
197  | 
apply (rule image_eqI)  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
198  | 
apply (rule the_equality [symmetric])  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
199  | 
apply assumption  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
200  | 
apply (simp add: assms [unfolded bi_unique_def])  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
201  | 
apply assumption  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
202  | 
done  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
203  | 
|
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
204  | 
subsection {* Setup for lifting package *}
 | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
205  | 
|
| 
47777
 
f29e7dcd7c40
use a quot_map theorem attribute instead of the complicated map attribute
 
kuncar 
parents: 
47680 
diff
changeset
 | 
206  | 
lemma Quotient_set[quot_map]:  | 
| 
47648
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
207  | 
assumes "Quotient R Abs Rep T"  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
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: 
47647 
diff
changeset
 | 
209  | 
using assms unfolding Quotient_alt_def4  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
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: 
47647 
diff
changeset
 | 
211  | 
apply (simp add: set_rel_def, fast)  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
212  | 
done  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
213  | 
|
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
214  | 
lemma set_invariant_commute [invariant_commute]:  | 
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
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: 
47647 
diff
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: 
47647 
diff
changeset
 | 
217  | 
|
| 
 
6b9d20a095ae
added covariant relator set_rel, with transfer rules for set operations
 
huffman 
parents: 
47647 
diff
changeset
 | 
218  | 
subsection {* Contravariant set map (vimage) and set relator *}
 | 
| 
47626
 
f7b1034cb9ce
move definition of set_rel into Library/Quotient_Set.thy
 
huffman 
parents: 
47455 
diff
changeset
 | 
219  | 
|
| 
47647
 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 
huffman 
parents: 
47626 
diff
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: 
47455 
diff
changeset
 | 
221  | 
|
| 
47647
 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 
huffman 
parents: 
47626 
diff
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: 
47626 
diff
changeset
 | 
223  | 
"vset_rel op = = op ="  | 
| 
 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 
huffman 
parents: 
47626 
diff
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: 
47455 
diff
changeset
 | 
225  | 
|
| 
47647
 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 
huffman 
parents: 
47626 
diff
changeset
 | 
226  | 
lemma vset_rel_equivp:  | 
| 
47626
 
f7b1034cb9ce
move definition of set_rel into Library/Quotient_Set.thy
 
huffman 
parents: 
47455 
diff
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: 
47626 
diff
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: 
47626 
diff
changeset
 | 
229  | 
unfolding vset_rel_def  | 
| 
47626
 
f7b1034cb9ce
move definition of set_rel into Library/Quotient_Set.thy
 
huffman 
parents: 
47455 
diff
changeset
 | 
230  | 
using equivp_reflp[OF e]  | 
| 
 
f7b1034cb9ce
move definition of set_rel into Library/Quotient_Set.thy
 
huffman 
parents: 
47455 
diff
changeset
 | 
231  | 
by auto (metis, metis equivp_symp[OF e])  | 
| 
 
f7b1034cb9ce
move definition of set_rel into Library/Quotient_Set.thy
 
huffman 
parents: 
47455 
diff
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: 
47626 
diff
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: 
47626 
diff
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: 
47626 
diff
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: 
47626 
diff
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: 
47626 
diff
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: 
47626 
diff
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: 
47626 
diff
changeset
 | 
254  | 
  "vset_rel R {} {}"
 | 
| 
 
ec29cc09599d
renamed contravariant relator set_rel to vset_rel, to make room for new covariant relator
 
huffman 
parents: 
47626 
diff
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: 
47626 
diff
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: 
47626 
diff
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: 
47626 
diff
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: 
47626 
diff
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: 
47626 
diff
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: 
47626 
diff
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: 
47626 
diff
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: 
47626 
diff
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: 
44413 
diff
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: 
44413 
diff
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: 
44413 
diff
changeset
 | 
305  | 
|
| 
45970
 
b6d0cff57d96
adjusted to set/pred distinction by means of type constructor `set`
 
haftmann 
parents: 
44873 
diff
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: 
47626 
diff
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: 
47626 
diff
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: 
44413 
diff
changeset
 | 
309  | 
|
| 
44413
 
80d460bc6fa8
Quotient Package: some infrastructure for lifting inside sets
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents:  
diff
changeset
 | 
310  | 
end  |