| author | wenzelm | 
| Tue, 18 Jul 2023 12:55:43 +0200 | |
| changeset 78393 | a2d22d519bf2 | 
| parent 78132 | 177dae28697b | 
| child 80069 | 67e77f1e6d7b | 
| permissions | -rw-r--r-- | 
| 53953 | 1  | 
(* Title: HOL/Library/FSet.thy  | 
2  | 
Author: Ondrej Kuncar, TU Muenchen  | 
|
3  | 
Author: Cezary Kaliszyk and Christian Urban  | 
|
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
4  | 
Author: Andrei Popescu, TU Muenchen  | 
| 78109 | 5  | 
Author: Martin Desharnais, MPI-INF Saarbruecken  | 
| 53953 | 6  | 
*)  | 
7  | 
||
| 60500 | 8  | 
section \<open>Type of finite sets defined as a subtype of sets\<close>  | 
| 53953 | 9  | 
|
10  | 
theory FSet  | 
|
| 
66262
 
4a2c9d32e7aa
finite sets are countable
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66261 
diff
changeset
 | 
11  | 
imports Main Countable  | 
| 53953 | 12  | 
begin  | 
13  | 
||
| 60500 | 14  | 
subsection \<open>Definition of the type\<close>  | 
| 53953 | 15  | 
|
16  | 
typedef 'a fset = "{A :: 'a set. finite A}"  morphisms fset Abs_fset
 | 
|
17  | 
by auto  | 
|
18  | 
||
19  | 
setup_lifting type_definition_fset  | 
|
20  | 
||
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
21  | 
|
| 60500 | 22  | 
subsection \<open>Basic operations and type class instantiations\<close>  | 
| 53953 | 23  | 
|
24  | 
(* FIXME transfer and right_total vs. bi_total *)  | 
|
25  | 
instantiation fset :: (finite) finite  | 
|
26  | 
begin  | 
|
| 60679 | 27  | 
instance by (standard; transfer; simp)  | 
| 53953 | 28  | 
end  | 
29  | 
||
30  | 
instantiation fset :: (type) "{bounded_lattice_bot, distrib_lattice, minus}"
 | 
|
31  | 
begin  | 
|
32  | 
||
| 63331 | 33  | 
lift_definition bot_fset :: "'a fset" is "{}" parametric empty_transfer by simp
 | 
| 53953 | 34  | 
|
| 63331 | 35  | 
lift_definition less_eq_fset :: "'a fset \<Rightarrow> 'a fset \<Rightarrow> bool" is subset_eq parametric subset_transfer  | 
| 
55565
 
f663fc1e653b
simplify proofs because of the stronger reflexivity prover
 
kuncar 
parents: 
55414 
diff
changeset
 | 
36  | 
.  | 
| 53953 | 37  | 
|
38  | 
definition less_fset :: "'a fset \<Rightarrow> 'a fset \<Rightarrow> bool" where "xs < ys \<equiv> xs \<le> ys \<and> xs \<noteq> (ys::'a fset)"  | 
|
39  | 
||
40  | 
lemma less_fset_transfer[transfer_rule]:  | 
|
| 63343 | 41  | 
includes lifting_syntax  | 
| 63331 | 42  | 
assumes [transfer_rule]: "bi_unique A"  | 
| 67399 | 43  | 
shows "((pcr_fset A) ===> (pcr_fset A) ===> (=)) (\<subset>) (<)"  | 
| 53953 | 44  | 
unfolding less_fset_def[abs_def] psubset_eq[abs_def] by transfer_prover  | 
| 63331 | 45  | 
|
| 53953 | 46  | 
|
47  | 
lift_definition sup_fset :: "'a fset \<Rightarrow> 'a fset \<Rightarrow> 'a fset" is union parametric union_transfer  | 
|
48  | 
by simp  | 
|
49  | 
||
50  | 
lift_definition inf_fset :: "'a fset \<Rightarrow> 'a fset \<Rightarrow> 'a fset" is inter parametric inter_transfer  | 
|
51  | 
by simp  | 
|
52  | 
||
53  | 
lift_definition minus_fset :: "'a fset \<Rightarrow> 'a fset \<Rightarrow> 'a fset" is minus parametric Diff_transfer  | 
|
54  | 
by simp  | 
|
55  | 
||
56  | 
instance  | 
|
| 60679 | 57  | 
by (standard; transfer; auto)+  | 
| 53953 | 58  | 
|
59  | 
end  | 
|
60  | 
||
61  | 
abbreviation fempty :: "'a fset" ("{||}") where "{||} \<equiv> bot"
 | 
|
62  | 
abbreviation fsubset_eq :: "'a fset \<Rightarrow> 'a fset \<Rightarrow> bool" (infix "|\<subseteq>|" 50) where "xs |\<subseteq>| ys \<equiv> xs \<le> ys"  | 
|
63  | 
abbreviation fsubset :: "'a fset \<Rightarrow> 'a fset \<Rightarrow> bool" (infix "|\<subset>|" 50) where "xs |\<subset>| ys \<equiv> xs < ys"  | 
|
64  | 
abbreviation funion :: "'a fset \<Rightarrow> 'a fset \<Rightarrow> 'a fset" (infixl "|\<union>|" 65) where "xs |\<union>| ys \<equiv> sup xs ys"  | 
|
65  | 
abbreviation finter :: "'a fset \<Rightarrow> 'a fset \<Rightarrow> 'a fset" (infixl "|\<inter>|" 65) where "xs |\<inter>| ys \<equiv> inf xs ys"  | 
|
66  | 
abbreviation fminus :: "'a fset \<Rightarrow> 'a fset \<Rightarrow> 'a fset" (infixl "|-|" 65) where "xs |-| ys \<equiv> minus xs ys"  | 
|
67  | 
||
| 54014 | 68  | 
instantiation fset :: (equal) equal  | 
69  | 
begin  | 
|
70  | 
definition "HOL.equal A B \<longleftrightarrow> A |\<subseteq>| B \<and> B |\<subseteq>| A"  | 
|
71  | 
instance by intro_classes (auto simp add: equal_fset_def)  | 
|
| 63331 | 72  | 
end  | 
| 54014 | 73  | 
|
| 53953 | 74  | 
instantiation fset :: (type) conditionally_complete_lattice  | 
75  | 
begin  | 
|
76  | 
||
| 63343 | 77  | 
context includes lifting_syntax  | 
78  | 
begin  | 
|
| 53953 | 79  | 
|
80  | 
lemma right_total_Inf_fset_transfer:  | 
|
81  | 
assumes [transfer_rule]: "bi_unique A" and [transfer_rule]: "right_total A"  | 
|
| 63331 | 82  | 
shows "(rel_set (rel_set A) ===> rel_set A)  | 
83  | 
    (\<lambda>S. if finite (\<Inter>S \<inter> Collect (Domainp A)) then \<Inter>S \<inter> Collect (Domainp A) else {})
 | 
|
| 53953 | 84  | 
      (\<lambda>S. if finite (Inf S) then Inf S else {})"
 | 
85  | 
by transfer_prover  | 
|
86  | 
||
87  | 
lemma Inf_fset_transfer:  | 
|
88  | 
assumes [transfer_rule]: "bi_unique A" and [transfer_rule]: "bi_total A"  | 
|
| 63331 | 89  | 
  shows "(rel_set (rel_set A) ===> rel_set A) (\<lambda>A. if finite (Inf A) then Inf A else {})
 | 
| 53953 | 90  | 
    (\<lambda>A. if finite (Inf A) then Inf A else {})"
 | 
91  | 
by transfer_prover  | 
|
92  | 
||
| 63331 | 93  | 
lift_definition Inf_fset :: "'a fset set \<Rightarrow> 'a fset" is "\<lambda>A. if finite (Inf A) then Inf A else {}"
 | 
| 53953 | 94  | 
parametric right_total_Inf_fset_transfer Inf_fset_transfer by simp  | 
95  | 
||
96  | 
lemma Sup_fset_transfer:  | 
|
97  | 
assumes [transfer_rule]: "bi_unique A"  | 
|
| 55938 | 98  | 
  shows "(rel_set (rel_set A) ===> rel_set A) (\<lambda>A. if finite (Sup A) then Sup A else {})
 | 
| 53953 | 99  | 
  (\<lambda>A. if finite (Sup A) then Sup A else {})" by transfer_prover
 | 
100  | 
||
101  | 
lift_definition Sup_fset :: "'a fset set \<Rightarrow> 'a fset" is "\<lambda>A. if finite (Sup A) then Sup A else {}"
 | 
|
102  | 
parametric Sup_fset_transfer by simp  | 
|
103  | 
||
104  | 
lemma finite_Sup: "\<exists>z. finite z \<and> (\<forall>a. a \<in> X \<longrightarrow> a \<le> z) \<Longrightarrow> finite (Sup X)"  | 
|
105  | 
by (auto intro: finite_subset)  | 
|
106  | 
||
| 67399 | 107  | 
lemma transfer_bdd_below[transfer_rule]: "(rel_set (pcr_fset (=)) ===> (=)) bdd_below bdd_below"  | 
| 
54258
 
adfc759263ab
use bdd_above and bdd_below for conditionally complete lattices
 
hoelzl 
parents: 
54014 
diff
changeset
 | 
108  | 
by auto  | 
| 
 
adfc759263ab
use bdd_above and bdd_below for conditionally complete lattices
 
hoelzl 
parents: 
54014 
diff
changeset
 | 
109  | 
|
| 63343 | 110  | 
end  | 
111  | 
||
| 53953 | 112  | 
instance  | 
| 63331 | 113  | 
proof  | 
| 53953 | 114  | 
fix x z :: "'a fset"  | 
115  | 
fix X :: "'a fset set"  | 
|
116  | 
  {
 | 
|
| 63331 | 117  | 
assume "x \<in> X" "bdd_below X"  | 
| 56646 | 118  | 
then show "Inf X |\<subseteq>| x" by transfer auto  | 
| 53953 | 119  | 
next  | 
120  | 
    assume "X \<noteq> {}" "(\<And>x. x \<in> X \<Longrightarrow> z |\<subseteq>| x)"
 | 
|
121  | 
then show "z |\<subseteq>| Inf X" by transfer (clarsimp, blast)  | 
|
122  | 
next  | 
|
| 
54258
 
adfc759263ab
use bdd_above and bdd_below for conditionally complete lattices
 
hoelzl 
parents: 
54014 
diff
changeset
 | 
123  | 
assume "x \<in> X" "bdd_above X"  | 
| 
 
adfc759263ab
use bdd_above and bdd_below for conditionally complete lattices
 
hoelzl 
parents: 
54014 
diff
changeset
 | 
124  | 
then obtain z where "x \<in> X" "(\<And>x. x \<in> X \<Longrightarrow> x |\<subseteq>| z)"  | 
| 
 
adfc759263ab
use bdd_above and bdd_below for conditionally complete lattices
 
hoelzl 
parents: 
54014 
diff
changeset
 | 
125  | 
by (auto simp: bdd_above_def)  | 
| 
 
adfc759263ab
use bdd_above and bdd_below for conditionally complete lattices
 
hoelzl 
parents: 
54014 
diff
changeset
 | 
126  | 
then show "x |\<subseteq>| Sup X"  | 
| 
 
adfc759263ab
use bdd_above and bdd_below for conditionally complete lattices
 
hoelzl 
parents: 
54014 
diff
changeset
 | 
127  | 
by transfer (auto intro!: finite_Sup)  | 
| 53953 | 128  | 
next  | 
129  | 
    assume "X \<noteq> {}" "(\<And>x. x \<in> X \<Longrightarrow> x |\<subseteq>| z)"
 | 
|
130  | 
then show "Sup X |\<subseteq>| z" by transfer (clarsimp, blast)  | 
|
131  | 
}  | 
|
132  | 
qed  | 
|
133  | 
end  | 
|
134  | 
||
| 63331 | 135  | 
instantiation fset :: (finite) complete_lattice  | 
| 53953 | 136  | 
begin  | 
137  | 
||
| 60679 | 138  | 
lift_definition top_fset :: "'a fset" is UNIV parametric right_total_UNIV_transfer UNIV_transfer  | 
139  | 
by simp  | 
|
| 53953 | 140  | 
|
| 60679 | 141  | 
instance  | 
142  | 
by (standard; transfer; auto)  | 
|
143  | 
||
| 53953 | 144  | 
end  | 
145  | 
||
146  | 
instantiation fset :: (finite) complete_boolean_algebra  | 
|
147  | 
begin  | 
|
148  | 
||
| 63331 | 149  | 
lift_definition uminus_fset :: "'a fset \<Rightarrow> 'a fset" is uminus  | 
| 53953 | 150  | 
parametric right_total_Compl_transfer Compl_transfer by simp  | 
151  | 
||
| 60679 | 152  | 
instance  | 
| 
67829
 
2a6ef5ba4822
Changes to complete distributive lattices due to Viorel Preoteasa
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
67764 
diff
changeset
 | 
153  | 
by (standard; transfer) (simp_all add: Inf_Sup Diff_eq)  | 
| 53953 | 154  | 
end  | 
155  | 
||
156  | 
abbreviation fUNIV :: "'a::finite fset" where "fUNIV \<equiv> top"  | 
|
157  | 
abbreviation fuminus :: "'a::finite fset \<Rightarrow> 'a fset" ("|-| _" [81] 80) where "|-| x \<equiv> uminus x"
 | 
|
158  | 
||
| 56646 | 159  | 
declare top_fset.rep_eq[simp]  | 
160  | 
||
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
161  | 
|
| 60500 | 162  | 
subsection \<open>Other operations\<close>  | 
| 53953 | 163  | 
|
164  | 
lift_definition finsert :: "'a \<Rightarrow> 'a fset \<Rightarrow> 'a fset" is insert parametric Lifting_Set.insert_transfer  | 
|
165  | 
by simp  | 
|
166  | 
||
167  | 
syntax  | 
|
168  | 
  "_insert_fset"     :: "args => 'a fset"  ("{|(_)|}")
 | 
|
169  | 
||
170  | 
translations  | 
|
171  | 
  "{|x, xs|}" == "CONST finsert x {|xs|}"
 | 
|
172  | 
  "{|x|}"     == "CONST finsert x {||}"
 | 
|
173  | 
||
| 
78103
 
0252d635bfb2
redefined FSet.fmember as an abbreviation based on Set.member
 
desharna 
parents: 
78102 
diff
changeset
 | 
174  | 
abbreviation fmember :: "'a \<Rightarrow> 'a fset \<Rightarrow> bool" (infix "|\<in>|" 50) where  | 
| 78106 | 175  | 
"x |\<in>| X \<equiv> x \<in> fset X"  | 
| 
78103
 
0252d635bfb2
redefined FSet.fmember as an abbreviation based on Set.member
 
desharna 
parents: 
78102 
diff
changeset
 | 
176  | 
|
| 78110 | 177  | 
abbreviation not_fmember :: "'a \<Rightarrow> 'a fset \<Rightarrow> bool" (infix "|\<notin>|" 50) where  | 
| 78106 | 178  | 
"x |\<notin>| X \<equiv> x \<notin> fset X"  | 
| 53953 | 179  | 
|
| 
78117
 
7735645667f0
redefined FSet.fBall and FSet.fBex as abbreviations based on Set.Ball and Set.Bex
 
desharna 
parents: 
78110 
diff
changeset
 | 
180  | 
context  | 
| 
 
7735645667f0
redefined FSet.fBall and FSet.fBex as abbreviations based on Set.Ball and Set.Bex
 
desharna 
parents: 
78110 
diff
changeset
 | 
181  | 
begin  | 
| 
 
7735645667f0
redefined FSet.fBall and FSet.fBex as abbreviations based on Set.Ball and Set.Bex
 
desharna 
parents: 
78110 
diff
changeset
 | 
182  | 
|
| 
 
7735645667f0
redefined FSet.fBall and FSet.fBex as abbreviations based on Set.Ball and Set.Bex
 
desharna 
parents: 
78110 
diff
changeset
 | 
183  | 
qualified abbreviation Ball :: "'a fset \<Rightarrow> ('a \<Rightarrow> bool) \<Rightarrow> bool" where
 | 
| 
 
7735645667f0
redefined FSet.fBall and FSet.fBex as abbreviations based on Set.Ball and Set.Bex
 
desharna 
parents: 
78110 
diff
changeset
 | 
184  | 
"Ball X \<equiv> Set.Ball (fset X)"  | 
| 
 
7735645667f0
redefined FSet.fBall and FSet.fBex as abbreviations based on Set.Ball and Set.Bex
 
desharna 
parents: 
78110 
diff
changeset
 | 
185  | 
|
| 
 
7735645667f0
redefined FSet.fBall and FSet.fBex as abbreviations based on Set.Ball and Set.Bex
 
desharna 
parents: 
78110 
diff
changeset
 | 
186  | 
alias fBall = FSet.Ball  | 
| 
 
7735645667f0
redefined FSet.fBall and FSet.fBex as abbreviations based on Set.Ball and Set.Bex
 
desharna 
parents: 
78110 
diff
changeset
 | 
187  | 
|
| 
 
7735645667f0
redefined FSet.fBall and FSet.fBex as abbreviations based on Set.Ball and Set.Bex
 
desharna 
parents: 
78110 
diff
changeset
 | 
188  | 
qualified abbreviation Bex :: "'a fset \<Rightarrow> ('a \<Rightarrow> bool) \<Rightarrow> bool" where
 | 
| 
 
7735645667f0
redefined FSet.fBall and FSet.fBex as abbreviations based on Set.Ball and Set.Bex
 
desharna 
parents: 
78110 
diff
changeset
 | 
189  | 
"Bex X \<equiv> Set.Bex (fset X)"  | 
| 
 
7735645667f0
redefined FSet.fBall and FSet.fBex as abbreviations based on Set.Ball and Set.Bex
 
desharna 
parents: 
78110 
diff
changeset
 | 
190  | 
|
| 
 
7735645667f0
redefined FSet.fBall and FSet.fBex as abbreviations based on Set.Ball and Set.Bex
 
desharna 
parents: 
78110 
diff
changeset
 | 
191  | 
alias fBex = FSet.Bex  | 
| 
 
7735645667f0
redefined FSet.fBall and FSet.fBex as abbreviations based on Set.Ball and Set.Bex
 
desharna 
parents: 
78110 
diff
changeset
 | 
192  | 
|
| 
 
7735645667f0
redefined FSet.fBall and FSet.fBex as abbreviations based on Set.Ball and Set.Bex
 
desharna 
parents: 
78110 
diff
changeset
 | 
193  | 
end  | 
| 
 
7735645667f0
redefined FSet.fBall and FSet.fBex as abbreviations based on Set.Ball and Set.Bex
 
desharna 
parents: 
78110 
diff
changeset
 | 
194  | 
|
| 63343 | 195  | 
context includes lifting_syntax  | 
| 53953 | 196  | 
begin  | 
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
197  | 
|
| 
78103
 
0252d635bfb2
redefined FSet.fmember as an abbreviation based on Set.member
 
desharna 
parents: 
78102 
diff
changeset
 | 
198  | 
lemma fmember_transfer0[transfer_rule]:  | 
| 
 
0252d635bfb2
redefined FSet.fmember as an abbreviation based on Set.member
 
desharna 
parents: 
78102 
diff
changeset
 | 
199  | 
assumes [transfer_rule]: "bi_unique A"  | 
| 
 
0252d635bfb2
redefined FSet.fmember as an abbreviation based on Set.member
 
desharna 
parents: 
78102 
diff
changeset
 | 
200  | 
shows "(A ===> pcr_fset A ===> (=)) (\<in>) (|\<in>|)"  | 
| 
 
0252d635bfb2
redefined FSet.fmember as an abbreviation based on Set.member
 
desharna 
parents: 
78102 
diff
changeset
 | 
201  | 
by transfer_prover  | 
| 
 
0252d635bfb2
redefined FSet.fmember as an abbreviation based on Set.member
 
desharna 
parents: 
78102 
diff
changeset
 | 
202  | 
|
| 
78117
 
7735645667f0
redefined FSet.fBall and FSet.fBex as abbreviations based on Set.Ball and Set.Bex
 
desharna 
parents: 
78110 
diff
changeset
 | 
203  | 
lemma fBall_transfer0[transfer_rule]:  | 
| 
 
7735645667f0
redefined FSet.fBall and FSet.fBex as abbreviations based on Set.Ball and Set.Bex
 
desharna 
parents: 
78110 
diff
changeset
 | 
204  | 
assumes [transfer_rule]: "bi_unique A"  | 
| 
 
7735645667f0
redefined FSet.fBall and FSet.fBex as abbreviations based on Set.Ball and Set.Bex
 
desharna 
parents: 
78110 
diff
changeset
 | 
205  | 
shows "(pcr_fset A ===> (A ===> (=)) ===> (=)) (Ball) (fBall)"  | 
| 
 
7735645667f0
redefined FSet.fBall and FSet.fBex as abbreviations based on Set.Ball and Set.Bex
 
desharna 
parents: 
78110 
diff
changeset
 | 
206  | 
by transfer_prover  | 
| 
 
7735645667f0
redefined FSet.fBall and FSet.fBex as abbreviations based on Set.Ball and Set.Bex
 
desharna 
parents: 
78110 
diff
changeset
 | 
207  | 
|
| 
 
7735645667f0
redefined FSet.fBall and FSet.fBex as abbreviations based on Set.Ball and Set.Bex
 
desharna 
parents: 
78110 
diff
changeset
 | 
208  | 
lemma fBex_transfer0[transfer_rule]:  | 
| 
 
7735645667f0
redefined FSet.fBall and FSet.fBex as abbreviations based on Set.Ball and Set.Bex
 
desharna 
parents: 
78110 
diff
changeset
 | 
209  | 
assumes [transfer_rule]: "bi_unique A"  | 
| 
 
7735645667f0
redefined FSet.fBall and FSet.fBex as abbreviations based on Set.Ball and Set.Bex
 
desharna 
parents: 
78110 
diff
changeset
 | 
210  | 
shows "(pcr_fset A ===> (A ===> (=)) ===> (=)) (Bex) (fBex)"  | 
| 
 
7735645667f0
redefined FSet.fBall and FSet.fBex as abbreviations based on Set.Ball and Set.Bex
 
desharna 
parents: 
78110 
diff
changeset
 | 
211  | 
by transfer_prover  | 
| 
 
7735645667f0
redefined FSet.fBall and FSet.fBex as abbreviations based on Set.Ball and Set.Bex
 
desharna 
parents: 
78110 
diff
changeset
 | 
212  | 
|
| 63331 | 213  | 
lift_definition ffilter :: "('a \<Rightarrow> bool) \<Rightarrow> 'a fset \<Rightarrow> 'a fset" is Set.filter
 | 
| 53953 | 214  | 
parametric Lifting_Set.filter_transfer unfolding Set.filter_def by simp  | 
215  | 
||
| 63331 | 216  | 
lift_definition fPow :: "'a fset \<Rightarrow> 'a fset fset" is Pow parametric Pow_transfer  | 
| 55732 | 217  | 
by (simp add: finite_subset)  | 
| 53953 | 218  | 
|
| 
55565
 
f663fc1e653b
simplify proofs because of the stronger reflexivity prover
 
kuncar 
parents: 
55414 
diff
changeset
 | 
219  | 
lift_definition fcard :: "'a fset \<Rightarrow> nat" is card parametric card_transfer .  | 
| 53953 | 220  | 
|
| 63331 | 221  | 
lift_definition fimage :: "('a \<Rightarrow> 'b) \<Rightarrow> 'a fset \<Rightarrow> 'b fset" (infixr "|`|" 90) is image
 | 
| 53953 | 222  | 
parametric image_transfer by simp  | 
223  | 
||
| 
55565
 
f663fc1e653b
simplify proofs because of the stronger reflexivity prover
 
kuncar 
parents: 
55414 
diff
changeset
 | 
224  | 
lift_definition fthe_elem :: "'a fset \<Rightarrow> 'a" is the_elem .  | 
| 53953 | 225  | 
|
| 63331 | 226  | 
lift_definition fbind :: "'a fset \<Rightarrow> ('a \<Rightarrow> 'b fset) \<Rightarrow> 'b fset" is Set.bind parametric bind_transfer
 | 
| 55738 | 227  | 
by (simp add: Set.bind_def)  | 
| 53953 | 228  | 
|
| 55732 | 229  | 
lift_definition ffUnion :: "'a fset fset \<Rightarrow> 'a fset" is Union parametric Union_transfer by simp  | 
| 53953 | 230  | 
|
| 
55565
 
f663fc1e653b
simplify proofs because of the stronger reflexivity prover
 
kuncar 
parents: 
55414 
diff
changeset
 | 
231  | 
lift_definition ffold :: "('a \<Rightarrow> 'b \<Rightarrow> 'b) \<Rightarrow> 'b \<Rightarrow> 'a fset \<Rightarrow> 'b" is Finite_Set.fold .
 | 
| 53963 | 232  | 
|
| 63622 | 233  | 
lift_definition fset_of_list :: "'a list \<Rightarrow> 'a fset" is set by (rule finite_set)  | 
234  | 
||
| 
68463
 
410818a69ee3
material on finite sets and maps
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
67829 
diff
changeset
 | 
235  | 
lift_definition sorted_list_of_fset :: "'a::linorder fset \<Rightarrow> 'a list" is sorted_list_of_set .  | 
| 
 
410818a69ee3
material on finite sets and maps
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
67829 
diff
changeset
 | 
236  | 
|
| 
78102
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
237  | 
|
| 60500 | 238  | 
subsection \<open>Transferred lemmas from Set.thy\<close>  | 
| 53953 | 239  | 
|
| 
78102
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
240  | 
lemma fset_eqI: "(\<And>x. (x |\<in>| A) = (x |\<in>| B)) \<Longrightarrow> A = B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
241  | 
by (rule set_eqI[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
242  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
243  | 
lemma fset_eq_iff[no_atp]: "(A = B) = (\<forall>x. (x |\<in>| A) = (x |\<in>| B))"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
244  | 
by (rule set_eq_iff[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
245  | 
|
| 
78121
 
e72884b2da04
removed intro, desc, elim, and simp annotations from FSet lemmas that are instances of lemmas in Set
 
desharna 
parents: 
78118 
diff
changeset
 | 
246  | 
lemma fBallI[no_atp]: "(\<And>x. x |\<in>| A \<Longrightarrow> P x) \<Longrightarrow> fBall A P"  | 
| 
78102
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
247  | 
by (rule ballI[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
248  | 
|
| 
78121
 
e72884b2da04
removed intro, desc, elim, and simp annotations from FSet lemmas that are instances of lemmas in Set
 
desharna 
parents: 
78118 
diff
changeset
 | 
249  | 
lemma fbspec[no_atp]: "fBall A P \<Longrightarrow> x |\<in>| A \<Longrightarrow> P x"  | 
| 
78102
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
250  | 
by (rule bspec[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
251  | 
|
| 
78121
 
e72884b2da04
removed intro, desc, elim, and simp annotations from FSet lemmas that are instances of lemmas in Set
 
desharna 
parents: 
78118 
diff
changeset
 | 
252  | 
lemma fBallE[no_atp]: "fBall A P \<Longrightarrow> (P x \<Longrightarrow> Q) \<Longrightarrow> (x |\<notin>| A \<Longrightarrow> Q) \<Longrightarrow> Q"  | 
| 
78102
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
253  | 
by (rule ballE[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
254  | 
|
| 
78121
 
e72884b2da04
removed intro, desc, elim, and simp annotations from FSet lemmas that are instances of lemmas in Set
 
desharna 
parents: 
78118 
diff
changeset
 | 
255  | 
lemma fBexI[no_atp]: "P x \<Longrightarrow> x |\<in>| A \<Longrightarrow> fBex A P"  | 
| 
78102
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
256  | 
by (rule bexI[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
257  | 
|
| 
78121
 
e72884b2da04
removed intro, desc, elim, and simp annotations from FSet lemmas that are instances of lemmas in Set
 
desharna 
parents: 
78118 
diff
changeset
 | 
258  | 
lemma rev_fBexI[no_atp]: "x |\<in>| A \<Longrightarrow> P x \<Longrightarrow> fBex A P"  | 
| 
78102
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
259  | 
by (rule rev_bexI[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
260  | 
|
| 
78121
 
e72884b2da04
removed intro, desc, elim, and simp annotations from FSet lemmas that are instances of lemmas in Set
 
desharna 
parents: 
78118 
diff
changeset
 | 
261  | 
lemma fBexCI[no_atp]: "(fBall A (\<lambda>x. \<not> P x) \<Longrightarrow> P a) \<Longrightarrow> a |\<in>| A \<Longrightarrow> fBex A P"  | 
| 
78102
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
262  | 
by (rule bexCI[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
263  | 
|
| 
78121
 
e72884b2da04
removed intro, desc, elim, and simp annotations from FSet lemmas that are instances of lemmas in Set
 
desharna 
parents: 
78118 
diff
changeset
 | 
264  | 
lemma fBexE[no_atp]: "fBex A P \<Longrightarrow> (\<And>x. x |\<in>| A \<Longrightarrow> P x \<Longrightarrow> Q) \<Longrightarrow> Q"  | 
| 
78102
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
265  | 
by (rule bexE[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
266  | 
|
| 
78121
 
e72884b2da04
removed intro, desc, elim, and simp annotations from FSet lemmas that are instances of lemmas in Set
 
desharna 
parents: 
78118 
diff
changeset
 | 
267  | 
lemma fBall_triv[no_atp]: "fBall A (\<lambda>x. P) = ((\<exists>x. x |\<in>| A) \<longrightarrow> P)"  | 
| 
78102
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
268  | 
by (rule ball_triv[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
269  | 
|
| 
78121
 
e72884b2da04
removed intro, desc, elim, and simp annotations from FSet lemmas that are instances of lemmas in Set
 
desharna 
parents: 
78118 
diff
changeset
 | 
270  | 
lemma fBex_triv[no_atp]: "fBex A (\<lambda>x. P) = ((\<exists>x. x |\<in>| A) \<and> P)"  | 
| 
78102
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
271  | 
by (rule bex_triv[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
272  | 
|
| 
78121
 
e72884b2da04
removed intro, desc, elim, and simp annotations from FSet lemmas that are instances of lemmas in Set
 
desharna 
parents: 
78118 
diff
changeset
 | 
273  | 
lemma fBex_triv_one_point1[no_atp]: "fBex A (\<lambda>x. x = a) = (a |\<in>| A)"  | 
| 
78102
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
274  | 
by (rule bex_triv_one_point1[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
275  | 
|
| 
78121
 
e72884b2da04
removed intro, desc, elim, and simp annotations from FSet lemmas that are instances of lemmas in Set
 
desharna 
parents: 
78118 
diff
changeset
 | 
276  | 
lemma fBex_triv_one_point2[no_atp]: "fBex A ((=) a) = (a |\<in>| A)"  | 
| 
78102
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
277  | 
by (rule bex_triv_one_point2[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
278  | 
|
| 
78121
 
e72884b2da04
removed intro, desc, elim, and simp annotations from FSet lemmas that are instances of lemmas in Set
 
desharna 
parents: 
78118 
diff
changeset
 | 
279  | 
lemma fBex_one_point1[no_atp]: "fBex A (\<lambda>x. x = a \<and> P x) = (a |\<in>| A \<and> P a)"  | 
| 
78102
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
280  | 
by (rule bex_one_point1[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
281  | 
|
| 
78121
 
e72884b2da04
removed intro, desc, elim, and simp annotations from FSet lemmas that are instances of lemmas in Set
 
desharna 
parents: 
78118 
diff
changeset
 | 
282  | 
lemma fBex_one_point2[no_atp]: "fBex A (\<lambda>x. a = x \<and> P x) = (a |\<in>| A \<and> P a)"  | 
| 
78102
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
283  | 
by (rule bex_one_point2[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
284  | 
|
| 
78121
 
e72884b2da04
removed intro, desc, elim, and simp annotations from FSet lemmas that are instances of lemmas in Set
 
desharna 
parents: 
78118 
diff
changeset
 | 
285  | 
lemma fBall_one_point1[no_atp]: "fBall A (\<lambda>x. x = a \<longrightarrow> P x) = (a |\<in>| A \<longrightarrow> P a)"  | 
| 
78102
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
286  | 
by (rule ball_one_point1[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
287  | 
|
| 
78121
 
e72884b2da04
removed intro, desc, elim, and simp annotations from FSet lemmas that are instances of lemmas in Set
 
desharna 
parents: 
78118 
diff
changeset
 | 
288  | 
lemma fBall_one_point2[no_atp]: "fBall A (\<lambda>x. a = x \<longrightarrow> P x) = (a |\<in>| A \<longrightarrow> P a)"  | 
| 
78102
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
289  | 
by (rule ball_one_point2[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
290  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
291  | 
lemma fBall_conj_distrib: "fBall A (\<lambda>x. P x \<and> Q x) = (fBall A P \<and> fBall A Q)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
292  | 
by (rule ball_conj_distrib[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
293  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
294  | 
lemma fBex_disj_distrib: "fBex A (\<lambda>x. P x \<or> Q x) = (fBex A P \<or> fBex A Q)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
295  | 
by (rule bex_disj_distrib[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
296  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
297  | 
lemma fBall_cong[fundef_cong]: "A = B \<Longrightarrow> (\<And>x. x |\<in>| B \<Longrightarrow> P x = Q x) \<Longrightarrow> fBall A P = fBall B Q"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
298  | 
by (rule ball_cong[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
299  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
300  | 
lemma fBex_cong[fundef_cong]: "A = B \<Longrightarrow> (\<And>x. x |\<in>| B \<Longrightarrow> P x = Q x) \<Longrightarrow> fBex A P = fBex B Q"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
301  | 
by (rule bex_cong[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
302  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
303  | 
lemma fsubsetI[intro!]: "(\<And>x. x |\<in>| A \<Longrightarrow> x |\<in>| B) \<Longrightarrow> A |\<subseteq>| B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
304  | 
by (rule subsetI[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
305  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
306  | 
lemma fsubsetD[elim, intro?]: "A |\<subseteq>| B \<Longrightarrow> c |\<in>| A \<Longrightarrow> c |\<in>| B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
307  | 
by (rule subsetD[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
308  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
309  | 
lemma rev_fsubsetD[no_atp,intro?]: "c |\<in>| A \<Longrightarrow> A |\<subseteq>| B \<Longrightarrow> c |\<in>| B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
310  | 
by (rule rev_subsetD[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
311  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
312  | 
lemma fsubsetCE[no_atp,elim]: "A |\<subseteq>| B \<Longrightarrow> (c |\<notin>| A \<Longrightarrow> P) \<Longrightarrow> (c |\<in>| B \<Longrightarrow> P) \<Longrightarrow> P"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
313  | 
by (rule subsetCE[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
314  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
315  | 
lemma fsubset_eq[no_atp]: "(A |\<subseteq>| B) = fBall A (\<lambda>x. x |\<in>| B)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
316  | 
by (rule subset_eq[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
317  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
318  | 
lemma contra_fsubsetD[no_atp]: "A |\<subseteq>| B \<Longrightarrow> c |\<notin>| B \<Longrightarrow> c |\<notin>| A"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
319  | 
by (rule contra_subsetD[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
320  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
321  | 
lemma fsubset_refl: "A |\<subseteq>| A"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
322  | 
by (rule subset_refl[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
323  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
324  | 
lemma fsubset_trans: "A |\<subseteq>| B \<Longrightarrow> B |\<subseteq>| C \<Longrightarrow> A |\<subseteq>| C"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
325  | 
by (rule subset_trans[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
326  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
327  | 
lemma fset_rev_mp: "c |\<in>| A \<Longrightarrow> A |\<subseteq>| B \<Longrightarrow> c |\<in>| B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
328  | 
by (rule rev_subsetD[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
329  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
330  | 
lemma fset_mp: "A |\<subseteq>| B \<Longrightarrow> c |\<in>| A \<Longrightarrow> c |\<in>| B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
331  | 
by (rule subsetD[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
332  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
333  | 
lemma fsubset_not_fsubset_eq[code]: "(A |\<subset>| B) = (A |\<subseteq>| B \<and> \<not> B |\<subseteq>| A)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
334  | 
by (rule subset_not_subset_eq[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
335  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
336  | 
lemma eq_fmem_trans: "a = b \<Longrightarrow> b |\<in>| A \<Longrightarrow> a |\<in>| A"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
337  | 
by (rule eq_mem_trans[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
338  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
339  | 
lemma fsubset_antisym[intro!]: "A |\<subseteq>| B \<Longrightarrow> B |\<subseteq>| A \<Longrightarrow> A = B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
340  | 
by (rule subset_antisym[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
341  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
342  | 
lemma fequalityD1: "A = B \<Longrightarrow> A |\<subseteq>| B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
343  | 
by (rule equalityD1[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
344  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
345  | 
lemma fequalityD2: "A = B \<Longrightarrow> B |\<subseteq>| A"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
346  | 
by (rule equalityD2[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
347  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
348  | 
lemma fequalityE: "A = B \<Longrightarrow> (A |\<subseteq>| B \<Longrightarrow> B |\<subseteq>| A \<Longrightarrow> P) \<Longrightarrow> P"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
349  | 
by (rule equalityE[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
350  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
351  | 
lemma fequalityCE[elim]:  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
352  | 
"A = B \<Longrightarrow> (c |\<in>| A \<Longrightarrow> c |\<in>| B \<Longrightarrow> P) \<Longrightarrow> (c |\<notin>| A \<Longrightarrow> c |\<notin>| B \<Longrightarrow> P) \<Longrightarrow> P"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
353  | 
by (rule equalityCE[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
354  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
355  | 
lemma eqfset_imp_iff: "A = B \<Longrightarrow> (x |\<in>| A) = (x |\<in>| B)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
356  | 
by (rule eqset_imp_iff[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
357  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
358  | 
lemma eqfelem_imp_iff: "x = y \<Longrightarrow> (x |\<in>| A) = (y |\<in>| A)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
359  | 
by (rule eqelem_imp_iff[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
360  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
361  | 
lemma fempty_iff[simp]: "(c |\<in>| {||}) = False"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
362  | 
by (rule empty_iff[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
363  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
364  | 
lemma fempty_fsubsetI[iff]: "{||} |\<subseteq>| x"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
365  | 
by (rule empty_subsetI[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
366  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
367  | 
lemma equalsffemptyI: "(\<And>y. y |\<in>| A \<Longrightarrow> False) \<Longrightarrow> A = {||}"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
368  | 
by (rule equals0I[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
369  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
370  | 
lemma equalsffemptyD: "A = {||} \<Longrightarrow> a |\<notin>| A"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
371  | 
by (rule equals0D[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
372  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
373  | 
lemma fBall_fempty[simp]: "fBall {||} P = True"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
374  | 
by (rule ball_empty[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
375  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
376  | 
lemma fBex_fempty[simp]: "fBex {||} P = False"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
377  | 
by (rule bex_empty[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
378  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
379  | 
lemma fPow_iff[iff]: "(A |\<in>| fPow B) = (A |\<subseteq>| B)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
380  | 
by (rule Pow_iff[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
381  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
382  | 
lemma fPowI: "A |\<subseteq>| B \<Longrightarrow> A |\<in>| fPow B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
383  | 
by (rule PowI[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
384  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
385  | 
lemma fPowD: "A |\<in>| fPow B \<Longrightarrow> A |\<subseteq>| B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
386  | 
by (rule PowD[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
387  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
388  | 
lemma fPow_bottom: "{||} |\<in>| fPow B"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
389  | 
by (rule Pow_bottom[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
390  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
391  | 
lemma fPow_top: "A |\<in>| fPow A"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
392  | 
by (rule Pow_top[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
393  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
394  | 
lemma fPow_not_fempty: "fPow A \<noteq> {||}"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
395  | 
by (rule Pow_not_empty[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
396  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
397  | 
lemma finter_iff[simp]: "(c |\<in>| A |\<inter>| B) = (c |\<in>| A \<and> c |\<in>| B)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
398  | 
by (rule Int_iff[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
399  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
400  | 
lemma finterI[intro!]: "c |\<in>| A \<Longrightarrow> c |\<in>| B \<Longrightarrow> c |\<in>| A |\<inter>| B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
401  | 
by (rule IntI[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
402  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
403  | 
lemma finterD1: "c |\<in>| A |\<inter>| B \<Longrightarrow> c |\<in>| A"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
404  | 
by (rule IntD1[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
405  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
406  | 
lemma finterD2: "c |\<in>| A |\<inter>| B \<Longrightarrow> c |\<in>| B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
407  | 
by (rule IntD2[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
408  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
409  | 
lemma finterE[elim!]: "c |\<in>| A |\<inter>| B \<Longrightarrow> (c |\<in>| A \<Longrightarrow> c |\<in>| B \<Longrightarrow> P) \<Longrightarrow> P"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
410  | 
by (rule IntE[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
411  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
412  | 
lemma funion_iff[simp]: "(c |\<in>| A |\<union>| B) = (c |\<in>| A \<or> c |\<in>| B)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
413  | 
by (rule Un_iff[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
414  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
415  | 
lemma funionI1[elim?]: "c |\<in>| A \<Longrightarrow> c |\<in>| A |\<union>| B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
416  | 
by (rule UnI1[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
417  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
418  | 
lemma funionI2[elim?]: "c |\<in>| B \<Longrightarrow> c |\<in>| A |\<union>| B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
419  | 
by (rule UnI2[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
420  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
421  | 
lemma funionCI[intro!]: "(c |\<notin>| B \<Longrightarrow> c |\<in>| A) \<Longrightarrow> c |\<in>| A |\<union>| B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
422  | 
by (rule UnCI[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
423  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
424  | 
lemma funionE[elim!]: "c |\<in>| A |\<union>| B \<Longrightarrow> (c |\<in>| A \<Longrightarrow> P) \<Longrightarrow> (c |\<in>| B \<Longrightarrow> P) \<Longrightarrow> P"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
425  | 
by (rule UnE[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
426  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
427  | 
lemma fminus_iff[simp]: "(c |\<in>| A |-| B) = (c |\<in>| A \<and> c |\<notin>| B)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
428  | 
by (rule Diff_iff[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
429  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
430  | 
lemma fminusI[intro!]: "c |\<in>| A \<Longrightarrow> c |\<notin>| B \<Longrightarrow> c |\<in>| A |-| B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
431  | 
by (rule DiffI[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
432  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
433  | 
lemma fminusD1: "c |\<in>| A |-| B \<Longrightarrow> c |\<in>| A"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
434  | 
by (rule DiffD1[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
435  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
436  | 
lemma fminusD2: "c |\<in>| A |-| B \<Longrightarrow> c |\<in>| B \<Longrightarrow> P"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
437  | 
by (rule DiffD2[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
438  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
439  | 
lemma fminusE[elim!]: "c |\<in>| A |-| B \<Longrightarrow> (c |\<in>| A \<Longrightarrow> c |\<notin>| B \<Longrightarrow> P) \<Longrightarrow> P"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
440  | 
by (rule DiffE[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
441  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
442  | 
lemma finsert_iff[simp]: "(a |\<in>| finsert b A) = (a = b \<or> a |\<in>| A)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
443  | 
by (rule insert_iff[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
444  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
445  | 
lemma finsertI1: "a |\<in>| finsert a B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
446  | 
by (rule insertI1[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
447  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
448  | 
lemma finsertI2: "a |\<in>| B \<Longrightarrow> a |\<in>| finsert b B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
449  | 
by (rule insertI2[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
450  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
451  | 
lemma finsertE[elim!]: "a |\<in>| finsert b A \<Longrightarrow> (a = b \<Longrightarrow> P) \<Longrightarrow> (a |\<in>| A \<Longrightarrow> P) \<Longrightarrow> P"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
452  | 
by (rule insertE[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
453  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
454  | 
lemma finsertCI[intro!]: "(a |\<notin>| B \<Longrightarrow> a = b) \<Longrightarrow> a |\<in>| finsert b B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
455  | 
by (rule insertCI[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
456  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
457  | 
lemma fsubset_finsert_iff:  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
458  | 
  "(A |\<subseteq>| finsert x B) = (if x |\<in>| A then A |-| {|x|} |\<subseteq>| B else A |\<subseteq>| B)"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
459  | 
by (rule subset_insert_iff[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
460  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
461  | 
lemma finsert_ident: "x |\<notin>| A \<Longrightarrow> x |\<notin>| B \<Longrightarrow> (finsert x A = finsert x B) = (A = B)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
462  | 
by (rule insert_ident[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
463  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
464  | 
lemma fsingletonI[intro!,no_atp]: "a |\<in>| {|a|}"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
465  | 
by (rule singletonI[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
466  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
467  | 
lemma fsingletonD[dest!,no_atp]: "b |\<in>| {|a|} \<Longrightarrow> b = a"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
468  | 
by (rule singletonD[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
469  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
470  | 
lemma fsingleton_iff: "(b |\<in>| {|a|}) = (b = a)"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
471  | 
by (rule singleton_iff[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
472  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
473  | 
lemma fsingleton_inject[dest!]: "{|a|} = {|b|} \<Longrightarrow> a = b"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
474  | 
by (rule singleton_inject[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
475  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
476  | 
lemma fsingleton_finsert_inj_eq[iff,no_atp]: "({|b|} = finsert a A) = (a = b \<and> A |\<subseteq>| {|b|})"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
477  | 
by (rule singleton_insert_inj_eq[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
478  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
479  | 
lemma fsingleton_finsert_inj_eq'[iff,no_atp]: "(finsert a A = {|b|}) = (a = b \<and> A |\<subseteq>| {|b|})"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
480  | 
by (rule singleton_insert_inj_eq'[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
481  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
482  | 
lemma fsubset_fsingletonD: "A |\<subseteq>| {|x|} \<Longrightarrow> A = {||} \<or> A = {|x|}"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
483  | 
by (rule subset_singletonD[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
484  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
485  | 
lemma fminus_single_finsert: "A |-| {|x|} |\<subseteq>| B \<Longrightarrow> A |\<subseteq>| finsert x B"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
486  | 
by (rule Diff_single_insert[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
487  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
488  | 
lemma fdoubleton_eq_iff: "({|a, b|} = {|c, d|}) = (a = c \<and> b = d \<or> a = d \<and> b = c)"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
489  | 
by (rule doubleton_eq_iff[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
490  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
491  | 
lemma funion_fsingleton_iff:  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
492  | 
  "(A |\<union>| B = {|x|}) = (A = {||} \<and> B = {|x|} \<or> A = {|x|} \<and> B = {||} \<or> A = {|x|} \<and> B = {|x|})"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
493  | 
by (rule Un_singleton_iff[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
494  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
495  | 
lemma fsingleton_funion_iff:  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
496  | 
  "({|x|} = A |\<union>| B) = (A = {||} \<and> B = {|x|} \<or> A = {|x|} \<and> B = {||} \<or> A = {|x|} \<and> B = {|x|})"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
497  | 
by (rule singleton_Un_iff[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
498  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
499  | 
lemma fimage_eqI[simp, intro]: "b = f x \<Longrightarrow> x |\<in>| A \<Longrightarrow> b |\<in>| f |`| A"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
500  | 
by (rule image_eqI[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
501  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
502  | 
lemma fimageI: "x |\<in>| A \<Longrightarrow> f x |\<in>| f |`| A"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
503  | 
by (rule imageI[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
504  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
505  | 
lemma rev_fimage_eqI: "x |\<in>| A \<Longrightarrow> b = f x \<Longrightarrow> b |\<in>| f |`| A"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
506  | 
by (rule rev_image_eqI[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
507  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
508  | 
lemma fimageE[elim!]: "b |\<in>| f |`| A \<Longrightarrow> (\<And>x. b = f x \<Longrightarrow> x |\<in>| A \<Longrightarrow> thesis) \<Longrightarrow> thesis"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
509  | 
by (rule imageE[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
510  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
511  | 
lemma Compr_fimage_eq: "{x. x |\<in>| f |`| A \<and> P x} = f ` {x. x |\<in>| A \<and> P (f x)}"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
512  | 
by (rule Compr_image_eq[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
513  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
514  | 
lemma fimage_funion: "f |`| (A |\<union>| B) = f |`| A |\<union>| f |`| B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
515  | 
by (rule image_Un[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
516  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
517  | 
lemma fimage_iff: "(z |\<in>| f |`| A) = fBex A (\<lambda>x. z = f x)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
518  | 
by (rule image_iff[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
519  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
520  | 
lemma fimage_fsubset_iff[no_atp]: "(f |`| A |\<subseteq>| B) = fBall A (\<lambda>x. f x |\<in>| B)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
521  | 
by (rule image_subset_iff[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
522  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
523  | 
lemma fimage_fsubsetI: "(\<And>x. x |\<in>| A \<Longrightarrow> f x |\<in>| B) \<Longrightarrow> f |`| A |\<subseteq>| B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
524  | 
by (rule image_subsetI[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
525  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
526  | 
lemma fimage_ident[simp]: "(\<lambda>x. x) |`| Y = Y"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
527  | 
by (rule image_ident[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
528  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
529  | 
lemma if_split_fmem1: "((if Q then x else y) |\<in>| b) = ((Q \<longrightarrow> x |\<in>| b) \<and> (\<not> Q \<longrightarrow> y |\<in>| b))"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
530  | 
by (rule if_split_mem1[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
531  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
532  | 
lemma if_split_fmem2: "(a |\<in>| (if Q then x else y)) = ((Q \<longrightarrow> a |\<in>| x) \<and> (\<not> Q \<longrightarrow> a |\<in>| y))"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
533  | 
by (rule if_split_mem2[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
534  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
535  | 
lemma pfsubsetI[intro!,no_atp]: "A |\<subseteq>| B \<Longrightarrow> A \<noteq> B \<Longrightarrow> A |\<subset>| B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
536  | 
by (rule psubsetI[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
537  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
538  | 
lemma pfsubsetE[elim!,no_atp]: "A |\<subset>| B \<Longrightarrow> (A |\<subseteq>| B \<Longrightarrow> \<not> B |\<subseteq>| A \<Longrightarrow> R) \<Longrightarrow> R"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
539  | 
by (rule psubsetE[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
540  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
541  | 
lemma pfsubset_finsert_iff:  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
542  | 
"(A |\<subset>| finsert x B) =  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
543  | 
    (if x |\<in>| B then A |\<subset>| B else if x |\<in>| A then A |-| {|x|} |\<subset>| B else A |\<subseteq>| B)"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
544  | 
by (rule psubset_insert_iff[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
545  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
546  | 
lemma pfsubset_eq: "(A |\<subset>| B) = (A |\<subseteq>| B \<and> A \<noteq> B)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
547  | 
by (rule psubset_eq[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
548  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
549  | 
lemma pfsubset_imp_fsubset: "A |\<subset>| B \<Longrightarrow> A |\<subseteq>| B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
550  | 
by (rule psubset_imp_subset[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
551  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
552  | 
lemma pfsubset_trans: "A |\<subset>| B \<Longrightarrow> B |\<subset>| C \<Longrightarrow> A |\<subset>| C"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
553  | 
by (rule psubset_trans[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
554  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
555  | 
lemma pfsubsetD: "A |\<subset>| B \<Longrightarrow> c |\<in>| A \<Longrightarrow> c |\<in>| B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
556  | 
by (rule psubsetD[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
557  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
558  | 
lemma pfsubset_fsubset_trans: "A |\<subset>| B \<Longrightarrow> B |\<subseteq>| C \<Longrightarrow> A |\<subset>| C"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
559  | 
by (rule psubset_subset_trans[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
560  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
561  | 
lemma fsubset_pfsubset_trans: "A |\<subseteq>| B \<Longrightarrow> B |\<subset>| C \<Longrightarrow> A |\<subset>| C"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
562  | 
by (rule subset_psubset_trans[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
563  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
564  | 
lemma pfsubset_imp_ex_fmem: "A |\<subset>| B \<Longrightarrow> \<exists>b. b |\<in>| B |-| A"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
565  | 
by (rule psubset_imp_ex_mem[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
566  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
567  | 
lemma fimage_fPow_mono: "f |`| A |\<subseteq>| B \<Longrightarrow> (|`|) f |`| fPow A |\<subseteq>| fPow B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
568  | 
by (rule image_Pow_mono[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
569  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
570  | 
lemma fimage_fPow_surj: "f |`| A = B \<Longrightarrow> (|`|) f |`| fPow A = fPow B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
571  | 
by (rule image_Pow_surj[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
572  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
573  | 
lemma fsubset_finsertI: "B |\<subseteq>| finsert a B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
574  | 
by (rule subset_insertI[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
575  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
576  | 
lemma fsubset_finsertI2: "A |\<subseteq>| B \<Longrightarrow> A |\<subseteq>| finsert b B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
577  | 
by (rule subset_insertI2[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
578  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
579  | 
lemma fsubset_finsert: "x |\<notin>| A \<Longrightarrow> (A |\<subseteq>| finsert x B) = (A |\<subseteq>| B)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
580  | 
by (rule subset_insert[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
581  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
582  | 
lemma funion_upper1: "A |\<subseteq>| A |\<union>| B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
583  | 
by (rule Un_upper1[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
584  | 
|
| 78104 | 585  | 
lemma funion_upper2: "B |\<subseteq>| A |\<union>| B"  | 
| 
78102
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
586  | 
by (rule Un_upper2[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
587  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
588  | 
lemma funion_least: "A |\<subseteq>| C \<Longrightarrow> B |\<subseteq>| C \<Longrightarrow> A |\<union>| B |\<subseteq>| C"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
589  | 
by (rule Un_least[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
590  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
591  | 
lemma finter_lower1: "A |\<inter>| B |\<subseteq>| A"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
592  | 
by (rule Int_lower1[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
593  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
594  | 
lemma finter_lower2: "A |\<inter>| B |\<subseteq>| B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
595  | 
by (rule Int_lower2[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
596  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
597  | 
lemma finter_greatest: "C |\<subseteq>| A \<Longrightarrow> C |\<subseteq>| B \<Longrightarrow> C |\<subseteq>| A |\<inter>| B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
598  | 
by (rule Int_greatest[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
599  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
600  | 
lemma fminus_fsubset: "A |-| B |\<subseteq>| A"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
601  | 
by (rule Diff_subset[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
602  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
603  | 
lemma fminus_fsubset_conv: "(A |-| B |\<subseteq>| C) = (A |\<subseteq>| B |\<union>| C)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
604  | 
by (rule Diff_subset_conv[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
605  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
606  | 
lemma fsubset_fempty[simp]: "(A |\<subseteq>| {||}) = (A = {||})"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
607  | 
by (rule subset_empty[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
608  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
609  | 
lemma not_pfsubset_fempty[iff]: "\<not> A |\<subset>| {||}"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
610  | 
by (rule not_psubset_empty[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
611  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
612  | 
lemma finsert_is_funion: "finsert a A = {|a|} |\<union>| A"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
613  | 
by (rule insert_is_Un[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
614  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
615  | 
lemma finsert_not_fempty[simp]: "finsert a A \<noteq> {||}"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
616  | 
by (rule insert_not_empty[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
617  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
618  | 
lemma fempty_not_finsert: "{||} \<noteq> finsert a A"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
619  | 
by (rule empty_not_insert[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
620  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
621  | 
lemma finsert_absorb: "a |\<in>| A \<Longrightarrow> finsert a A = A"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
622  | 
by (rule insert_absorb[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
623  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
624  | 
lemma finsert_absorb2[simp]: "finsert x (finsert x A) = finsert x A"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
625  | 
by (rule insert_absorb2[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
626  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
627  | 
lemma finsert_commute: "finsert x (finsert y A) = finsert y (finsert x A)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
628  | 
by (rule insert_commute[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
629  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
630  | 
lemma finsert_fsubset[simp]: "(finsert x A |\<subseteq>| B) = (x |\<in>| B \<and> A |\<subseteq>| B)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
631  | 
by (rule insert_subset[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
632  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
633  | 
lemma finsert_inter_finsert[simp]: "finsert a A |\<inter>| finsert a B = finsert a (A |\<inter>| B)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
634  | 
by (rule insert_inter_insert[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
635  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
636  | 
lemma finsert_disjoint[simp,no_atp]:  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
637  | 
  "(finsert a A |\<inter>| B = {||}) = (a |\<notin>| B \<and> A |\<inter>| B = {||})"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
638  | 
  "({||} = finsert a A |\<inter>| B) = (a |\<notin>| B \<and> {||} = A |\<inter>| B)"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
639  | 
by (rule insert_disjoint[Transfer.transferred])+  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
640  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
641  | 
lemma disjoint_finsert[simp,no_atp]:  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
642  | 
  "(B |\<inter>| finsert a A = {||}) = (a |\<notin>| B \<and> B |\<inter>| A = {||})"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
643  | 
  "({||} = A |\<inter>| finsert b B) = (b |\<notin>| A \<and> {||} = A |\<inter>| B)"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
644  | 
by (rule disjoint_insert[Transfer.transferred])+  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
645  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
646  | 
lemma fimage_fempty[simp]: "f |`| {||} = {||}"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
647  | 
by (rule image_empty[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
648  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
649  | 
lemma fimage_finsert[simp]: "f |`| finsert a B = finsert (f a) (f |`| B)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
650  | 
by (rule image_insert[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
651  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
652  | 
lemma fimage_constant: "x |\<in>| A \<Longrightarrow> (\<lambda>x. c) |`| A = {|c|}"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
653  | 
by (rule image_constant[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
654  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
655  | 
lemma fimage_constant_conv: "(\<lambda>x. c) |`| A = (if A = {||} then {||} else {|c|})"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
656  | 
by (rule image_constant_conv[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
657  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
658  | 
lemma fimage_fimage: "f |`| g |`| A = (\<lambda>x. f (g x)) |`| A"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
659  | 
by (rule image_image[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
660  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
661  | 
lemma finsert_fimage[simp]: "x |\<in>| A \<Longrightarrow> finsert (f x) (f |`| A) = f |`| A"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
662  | 
by (rule insert_image[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
663  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
664  | 
lemma fimage_is_fempty[iff]: "(f |`| A = {||}) = (A = {||})"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
665  | 
by (rule image_is_empty[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
666  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
667  | 
lemma fempty_is_fimage[iff]: "({||} = f |`| A) = (A = {||})"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
668  | 
by (rule empty_is_image[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
669  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
670  | 
lemma fimage_cong: "M = N \<Longrightarrow> (\<And>x. x |\<in>| N \<Longrightarrow> f x = g x) \<Longrightarrow> f |`| M = g |`| N"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
671  | 
by (rule image_cong[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
672  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
673  | 
lemma fimage_finter_fsubset: "f |`| (A |\<inter>| B) |\<subseteq>| f |`| A |\<inter>| f |`| B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
674  | 
by (rule image_Int_subset[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
675  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
676  | 
lemma fimage_fminus_fsubset: "f |`| A |-| f |`| B |\<subseteq>| f |`| (A |-| B)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
677  | 
by (rule image_diff_subset[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
678  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
679  | 
lemma finter_absorb: "A |\<inter>| A = A"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
680  | 
by (rule Int_absorb[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
681  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
682  | 
lemma finter_left_absorb: "A |\<inter>| (A |\<inter>| B) = A |\<inter>| B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
683  | 
by (rule Int_left_absorb[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
684  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
685  | 
lemma finter_commute: "A |\<inter>| B = B |\<inter>| A"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
686  | 
by (rule Int_commute[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
687  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
688  | 
lemma finter_left_commute: "A |\<inter>| (B |\<inter>| C) = B |\<inter>| (A |\<inter>| C)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
689  | 
by (rule Int_left_commute[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
690  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
691  | 
lemma finter_assoc: "A |\<inter>| B |\<inter>| C = A |\<inter>| (B |\<inter>| C)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
692  | 
by (rule Int_assoc[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
693  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
694  | 
lemma finter_ac:  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
695  | 
"A |\<inter>| B |\<inter>| C = A |\<inter>| (B |\<inter>| C)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
696  | 
"A |\<inter>| (A |\<inter>| B) = A |\<inter>| B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
697  | 
"A |\<inter>| B = B |\<inter>| A"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
698  | 
"A |\<inter>| (B |\<inter>| C) = B |\<inter>| (A |\<inter>| C)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
699  | 
by (rule Int_ac[Transfer.transferred])+  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
700  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
701  | 
lemma finter_absorb1: "B |\<subseteq>| A \<Longrightarrow> A |\<inter>| B = B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
702  | 
by (rule Int_absorb1[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
703  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
704  | 
lemma finter_absorb2: "A |\<subseteq>| B \<Longrightarrow> A |\<inter>| B = A"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
705  | 
by (rule Int_absorb2[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
706  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
707  | 
lemma finter_fempty_left: "{||} |\<inter>| B = {||}"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
708  | 
by (rule Int_empty_left[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
709  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
710  | 
lemma finter_fempty_right: "A |\<inter>| {||} = {||}"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
711  | 
by (rule Int_empty_right[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
712  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
713  | 
lemma disjoint_iff_fnot_equal: "(A |\<inter>| B = {||}) = fBall A (\<lambda>x. fBall B ((\<noteq>) x))"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
714  | 
by (rule disjoint_iff_not_equal[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
715  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
716  | 
lemma finter_funion_distrib: "A |\<inter>| (B |\<union>| C) = A |\<inter>| B |\<union>| (A |\<inter>| C)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
717  | 
by (rule Int_Un_distrib[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
718  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
719  | 
lemma finter_funion_distrib2: "B |\<union>| C |\<inter>| A = B |\<inter>| A |\<union>| (C |\<inter>| A)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
720  | 
by (rule Int_Un_distrib2[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
721  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
722  | 
lemma finter_fsubset_iff[no_atp, simp]: "(C |\<subseteq>| A |\<inter>| B) = (C |\<subseteq>| A \<and> C |\<subseteq>| B)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
723  | 
by (rule Int_subset_iff[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
724  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
725  | 
lemma funion_absorb: "A |\<union>| A = A"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
726  | 
by (rule Un_absorb[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
727  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
728  | 
lemma funion_left_absorb: "A |\<union>| (A |\<union>| B) = A |\<union>| B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
729  | 
by (rule Un_left_absorb[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
730  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
731  | 
lemma funion_commute: "A |\<union>| B = B |\<union>| A"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
732  | 
by (rule Un_commute[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
733  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
734  | 
lemma funion_left_commute: "A |\<union>| (B |\<union>| C) = B |\<union>| (A |\<union>| C)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
735  | 
by (rule Un_left_commute[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
736  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
737  | 
lemma funion_assoc: "A |\<union>| B |\<union>| C = A |\<union>| (B |\<union>| C)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
738  | 
by (rule Un_assoc[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
739  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
740  | 
lemma funion_ac:  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
741  | 
"A |\<union>| B |\<union>| C = A |\<union>| (B |\<union>| C)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
742  | 
"A |\<union>| (A |\<union>| B) = A |\<union>| B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
743  | 
"A |\<union>| B = B |\<union>| A"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
744  | 
"A |\<union>| (B |\<union>| C) = B |\<union>| (A |\<union>| C)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
745  | 
by (rule Un_ac[Transfer.transferred])+  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
746  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
747  | 
lemma funion_absorb1: "A |\<subseteq>| B \<Longrightarrow> A |\<union>| B = B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
748  | 
by (rule Un_absorb1[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
749  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
750  | 
lemma funion_absorb2: "B |\<subseteq>| A \<Longrightarrow> A |\<union>| B = A"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
751  | 
by (rule Un_absorb2[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
752  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
753  | 
lemma funion_fempty_left: "{||} |\<union>| B = B"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
754  | 
by (rule Un_empty_left[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
755  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
756  | 
lemma funion_fempty_right: "A |\<union>| {||} = A"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
757  | 
by (rule Un_empty_right[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
758  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
759  | 
lemma funion_finsert_left[simp]: "finsert a B |\<union>| C = finsert a (B |\<union>| C)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
760  | 
by (rule Un_insert_left[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
761  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
762  | 
lemma funion_finsert_right[simp]: "A |\<union>| finsert a B = finsert a (A |\<union>| B)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
763  | 
by (rule Un_insert_right[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
764  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
765  | 
lemma finter_finsert_left: "finsert a B |\<inter>| C = (if a |\<in>| C then finsert a (B |\<inter>| C) else B |\<inter>| C)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
766  | 
by (rule Int_insert_left[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
767  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
768  | 
lemma finter_finsert_left_ifffempty[simp]: "a |\<notin>| C \<Longrightarrow> finsert a B |\<inter>| C = B |\<inter>| C"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
769  | 
by (rule Int_insert_left_if0[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
770  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
771  | 
lemma finter_finsert_left_if1[simp]: "a |\<in>| C \<Longrightarrow> finsert a B |\<inter>| C = finsert a (B |\<inter>| C)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
772  | 
by (rule Int_insert_left_if1[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
773  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
774  | 
lemma finter_finsert_right:  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
775  | 
"A |\<inter>| finsert a B = (if a |\<in>| A then finsert a (A |\<inter>| B) else A |\<inter>| B)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
776  | 
by (rule Int_insert_right[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
777  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
778  | 
lemma finter_finsert_right_ifffempty[simp]: "a |\<notin>| A \<Longrightarrow> A |\<inter>| finsert a B = A |\<inter>| B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
779  | 
by (rule Int_insert_right_if0[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
780  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
781  | 
lemma finter_finsert_right_if1[simp]: "a |\<in>| A \<Longrightarrow> A |\<inter>| finsert a B = finsert a (A |\<inter>| B)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
782  | 
by (rule Int_insert_right_if1[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
783  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
784  | 
lemma funion_finter_distrib: "A |\<union>| (B |\<inter>| C) = A |\<union>| B |\<inter>| (A |\<union>| C)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
785  | 
by (rule Un_Int_distrib[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
786  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
787  | 
lemma funion_finter_distrib2: "B |\<inter>| C |\<union>| A = B |\<union>| A |\<inter>| (C |\<union>| A)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
788  | 
by (rule Un_Int_distrib2[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
789  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
790  | 
lemma funion_finter_crazy:  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
791  | 
"A |\<inter>| B |\<union>| (B |\<inter>| C) |\<union>| (C |\<inter>| A) = A |\<union>| B |\<inter>| (B |\<union>| C) |\<inter>| (C |\<union>| A)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
792  | 
by (rule Un_Int_crazy[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
793  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
794  | 
lemma fsubset_funion_eq: "(A |\<subseteq>| B) = (A |\<union>| B = B)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
795  | 
by (rule subset_Un_eq[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
796  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
797  | 
lemma funion_fempty[iff]: "(A |\<union>| B = {||}) = (A = {||} \<and> B = {||})"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
798  | 
by (rule Un_empty[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
799  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
800  | 
lemma funion_fsubset_iff[no_atp, simp]: "(A |\<union>| B |\<subseteq>| C) = (A |\<subseteq>| C \<and> B |\<subseteq>| C)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
801  | 
by (rule Un_subset_iff[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
802  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
803  | 
lemma funion_fminus_finter: "A |-| B |\<union>| (A |\<inter>| B) = A"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
804  | 
by (rule Un_Diff_Int[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
805  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
806  | 
lemma ffunion_empty[simp]: "ffUnion {||} = {||}"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
807  | 
by (rule Union_empty[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
808  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
809  | 
lemma ffunion_mono: "A |\<subseteq>| B \<Longrightarrow> ffUnion A |\<subseteq>| ffUnion B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
810  | 
by (rule Union_mono[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
811  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
812  | 
lemma ffunion_insert[simp]: "ffUnion (finsert a B) = a |\<union>| ffUnion B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
813  | 
by (rule Union_insert[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
814  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
815  | 
lemma fminus_finter2: "A |\<inter>| C |-| (B |\<inter>| C) = A |\<inter>| C |-| B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
816  | 
by (rule Diff_Int2[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
817  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
818  | 
lemma funion_finter_assoc_eq: "(A |\<inter>| B |\<union>| C = A |\<inter>| (B |\<union>| C)) = (C |\<subseteq>| A)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
819  | 
by (rule Un_Int_assoc_eq[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
820  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
821  | 
lemma fBall_funion: "fBall (A |\<union>| B) P = (fBall A P \<and> fBall B P)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
822  | 
by (rule ball_Un[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
823  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
824  | 
lemma fBex_funion: "fBex (A |\<union>| B) P = (fBex A P \<or> fBex B P)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
825  | 
by (rule bex_Un[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
826  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
827  | 
lemma fminus_eq_fempty_iff[simp,no_atp]: "(A |-| B = {||}) = (A |\<subseteq>| B)"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
828  | 
by (rule Diff_eq_empty_iff[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
829  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
830  | 
lemma fminus_cancel[simp]: "A |-| A = {||}"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
831  | 
by (rule Diff_cancel[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
832  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
833  | 
lemma fminus_idemp[simp]: "A |-| B |-| B = A |-| B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
834  | 
by (rule Diff_idemp[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
835  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
836  | 
lemma fminus_triv: "A |\<inter>| B = {||} \<Longrightarrow> A |-| B = A"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
837  | 
by (rule Diff_triv[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
838  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
839  | 
lemma fempty_fminus[simp]: "{||} |-| A = {||}"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
840  | 
by (rule empty_Diff[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
841  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
842  | 
lemma fminus_fempty[simp]: "A |-| {||} = A"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
843  | 
by (rule Diff_empty[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
844  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
845  | 
lemma fminus_finsertffempty[simp,no_atp]: "x |\<notin>| A \<Longrightarrow> A |-| finsert x B = A |-| B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
846  | 
by (rule Diff_insert0[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
847  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
848  | 
lemma fminus_finsert: "A |-| finsert a B = A |-| B |-| {|a|}"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
849  | 
by (rule Diff_insert[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
850  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
851  | 
lemma fminus_finsert2: "A |-| finsert a B = A |-| {|a|} |-| B"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
852  | 
by (rule Diff_insert2[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
853  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
854  | 
lemma finsert_fminus_if: "finsert x A |-| B = (if x |\<in>| B then A |-| B else finsert x (A |-| B))"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
855  | 
by (rule insert_Diff_if[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
856  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
857  | 
lemma finsert_fminus1[simp]: "x |\<in>| B \<Longrightarrow> finsert x A |-| B = A |-| B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
858  | 
by (rule insert_Diff1[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
859  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
860  | 
lemma finsert_fminus_single[simp]: "finsert a (A |-| {|a|}) = finsert a A"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
861  | 
by (rule insert_Diff_single[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
862  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
863  | 
lemma finsert_fminus: "a |\<in>| A \<Longrightarrow> finsert a (A |-| {|a|}) = A"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
864  | 
by (rule insert_Diff[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
865  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
866  | 
lemma fminus_finsert_absorb: "x |\<notin>| A \<Longrightarrow> finsert x A |-| {|x|} = A"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
867  | 
by (rule Diff_insert_absorb[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
868  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
869  | 
lemma fminus_disjoint[simp]: "A |\<inter>| (B |-| A) = {||}"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
870  | 
by (rule Diff_disjoint[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
871  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
872  | 
lemma fminus_partition: "A |\<subseteq>| B \<Longrightarrow> A |\<union>| (B |-| A) = B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
873  | 
by (rule Diff_partition[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
874  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
875  | 
lemma double_fminus: "A |\<subseteq>| B \<Longrightarrow> B |\<subseteq>| C \<Longrightarrow> B |-| (C |-| A) = A"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
876  | 
by (rule double_diff[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
877  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
878  | 
lemma funion_fminus_cancel[simp]: "A |\<union>| (B |-| A) = A |\<union>| B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
879  | 
by (rule Un_Diff_cancel[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
880  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
881  | 
lemma funion_fminus_cancel2[simp]: "B |-| A |\<union>| A = B |\<union>| A"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
882  | 
by (rule Un_Diff_cancel2[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
883  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
884  | 
lemma fminus_funion: "A |-| (B |\<union>| C) = A |-| B |\<inter>| (A |-| C)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
885  | 
by (rule Diff_Un[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
886  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
887  | 
lemma fminus_finter: "A |-| (B |\<inter>| C) = A |-| B |\<union>| (A |-| C)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
888  | 
by (rule Diff_Int[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
889  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
890  | 
lemma funion_fminus: "A |\<union>| B |-| C = A |-| C |\<union>| (B |-| C)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
891  | 
by (rule Un_Diff[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
892  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
893  | 
lemma finter_fminus: "A |\<inter>| B |-| C = A |\<inter>| (B |-| C)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
894  | 
by (rule Int_Diff[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
895  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
896  | 
lemma fminus_finter_distrib: "C |\<inter>| (A |-| B) = C |\<inter>| A |-| (C |\<inter>| B)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
897  | 
by (rule Diff_Int_distrib[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
898  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
899  | 
lemma fminus_finter_distrib2: "A |-| B |\<inter>| C = A |\<inter>| C |-| (B |\<inter>| C)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
900  | 
by (rule Diff_Int_distrib2[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
901  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
902  | 
lemma fUNIV_bool[no_atp]: "fUNIV = {|False, True|}"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
903  | 
by (rule UNIV_bool[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
904  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
905  | 
lemma fPow_fempty[simp]: "fPow {||} = {|{||}|}"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
906  | 
by (rule Pow_empty[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
907  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
908  | 
lemma fPow_finsert: "fPow (finsert a A) = fPow A |\<union>| finsert a |`| fPow A"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
909  | 
by (rule Pow_insert[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
910  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
911  | 
lemma funion_fPow_fsubset: "fPow A |\<union>| fPow B |\<subseteq>| fPow (A |\<union>| B)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
912  | 
by (rule Un_Pow_subset[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
913  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
914  | 
lemma fPow_finter_eq[simp]: "fPow (A |\<inter>| B) = fPow A |\<inter>| fPow B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
915  | 
by (rule Pow_Int_eq[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
916  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
917  | 
lemma fset_eq_fsubset: "(A = B) = (A |\<subseteq>| B \<and> B |\<subseteq>| A)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
918  | 
by (rule set_eq_subset[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
919  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
920  | 
lemma fsubset_iff[no_atp]: "(A |\<subseteq>| B) = (\<forall>t. t |\<in>| A \<longrightarrow> t |\<in>| B)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
921  | 
by (rule subset_iff[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
922  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
923  | 
lemma fsubset_iff_pfsubset_eq: "(A |\<subseteq>| B) = (A |\<subset>| B \<or> A = B)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
924  | 
by (rule subset_iff_psubset_eq[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
925  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
926  | 
lemma all_not_fin_conv[simp]: "(\<forall>x. x |\<notin>| A) = (A = {||})"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
927  | 
by (rule all_not_in_conv[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
928  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
929  | 
lemma ex_fin_conv: "(\<exists>x. x |\<in>| A) = (A \<noteq> {||})"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
930  | 
by (rule ex_in_conv[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
931  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
932  | 
lemma fimage_mono: "A |\<subseteq>| B \<Longrightarrow> f |`| A |\<subseteq>| f |`| B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
933  | 
by (rule image_mono[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
934  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
935  | 
lemma fPow_mono: "A |\<subseteq>| B \<Longrightarrow> fPow A |\<subseteq>| fPow B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
936  | 
by (rule Pow_mono[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
937  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
938  | 
lemma finsert_mono: "C |\<subseteq>| D \<Longrightarrow> finsert a C |\<subseteq>| finsert a D"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
939  | 
by (rule insert_mono[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
940  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
941  | 
lemma funion_mono: "A |\<subseteq>| C \<Longrightarrow> B |\<subseteq>| D \<Longrightarrow> A |\<union>| B |\<subseteq>| C |\<union>| D"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
942  | 
by (rule Un_mono[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
943  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
944  | 
lemma finter_mono: "A |\<subseteq>| C \<Longrightarrow> B |\<subseteq>| D \<Longrightarrow> A |\<inter>| B |\<subseteq>| C |\<inter>| D"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
945  | 
by (rule Int_mono[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
946  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
947  | 
lemma fminus_mono: "A |\<subseteq>| C \<Longrightarrow> D |\<subseteq>| B \<Longrightarrow> A |-| B |\<subseteq>| C |-| D"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
948  | 
by (rule Diff_mono[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
949  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
950  | 
lemma fin_mono: "A |\<subseteq>| B \<Longrightarrow> x |\<in>| A \<longrightarrow> x |\<in>| B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
951  | 
by (rule in_mono[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
952  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
953  | 
lemma fthe_felem_eq[simp]: "fthe_elem {|x|} = x"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
954  | 
by (rule the_elem_eq[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
955  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
956  | 
lemma fLeast_mono:  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
957  | 
"mono f \<Longrightarrow> fBex S (\<lambda>x. fBall S ((\<le>) x)) \<Longrightarrow> (LEAST y. y |\<in>| f |`| S) = f (LEAST x. x |\<in>| S)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
958  | 
by (rule Least_mono[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
959  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
960  | 
lemma fbind_fbind: "fbind (fbind A B) C = fbind A (\<lambda>x. fbind (B x) C)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
961  | 
by (rule Set.bind_bind[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
962  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
963  | 
lemma fempty_fbind[simp]: "fbind {||} f = {||}"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
964  | 
by (rule empty_bind[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
965  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
966  | 
lemma nonfempty_fbind_const: "A \<noteq> {||} \<Longrightarrow> fbind A (\<lambda>_. B) = B"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
967  | 
by (rule nonempty_bind_const[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
968  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
969  | 
lemma fbind_const: "fbind A (\<lambda>_. B) = (if A = {||} then {||} else B)"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
970  | 
by (rule bind_const[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
971  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
972  | 
lemma ffmember_filter[simp]: "(x |\<in>| ffilter P A) = (x |\<in>| A \<and> P x)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
973  | 
by (rule member_filter[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
974  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
975  | 
lemma fequalityI: "A |\<subseteq>| B \<Longrightarrow> B |\<subseteq>| A \<Longrightarrow> A = B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
976  | 
by (rule equalityI[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
977  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
978  | 
lemma fset_of_list_simps[simp]:  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
979  | 
  "fset_of_list [] = {||}"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
980  | 
"fset_of_list (x21 # x22) = finsert x21 (fset_of_list x22)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
981  | 
by (rule set_simps[Transfer.transferred])+  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
982  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
983  | 
lemma fset_of_list_append[simp]: "fset_of_list (xs @ ys) = fset_of_list xs |\<union>| fset_of_list ys"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
984  | 
by (rule set_append[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
985  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
986  | 
lemma fset_of_list_rev[simp]: "fset_of_list (rev xs) = fset_of_list xs"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
987  | 
by (rule set_rev[Transfer.transferred])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
988  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
989  | 
lemma fset_of_list_map[simp]: "fset_of_list (map f xs) = f |`| fset_of_list xs"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
990  | 
by (rule set_map[Transfer.transferred])  | 
| 53953 | 991  | 
|
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
992  | 
|
| 60500 | 993  | 
subsection \<open>Additional lemmas\<close>  | 
| 53953 | 994  | 
|
| 
66264
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
995  | 
subsubsection \<open>\<open>ffUnion\<close>\<close>  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
996  | 
|
| 
78102
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
997  | 
lemma ffUnion_funion_distrib[simp]: "ffUnion (A |\<union>| B) = ffUnion A |\<union>| ffUnion B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
998  | 
by (rule Union_Un_distrib[Transfer.transferred])  | 
| 
66264
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
999  | 
|
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1000  | 
|
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1001  | 
subsubsection \<open>\<open>fbind\<close>\<close>  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1002  | 
|
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1003  | 
lemma fbind_cong[fundef_cong]: "A = B \<Longrightarrow> (\<And>x. x |\<in>| B \<Longrightarrow> f x = g x) \<Longrightarrow> fbind A f = fbind B g"  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1004  | 
by transfer force  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1005  | 
|
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1006  | 
|
| 61585 | 1007  | 
subsubsection \<open>\<open>fsingleton\<close>\<close>  | 
| 53953 | 1008  | 
|
| 
78102
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
1009  | 
lemma fsingletonE: " b |\<in>| {|a|} \<Longrightarrow> (b = a \<Longrightarrow> thesis) \<Longrightarrow> thesis"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
1010  | 
by (rule fsingletonD [elim_format])  | 
| 53953 | 1011  | 
|
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1012  | 
|
| 61585 | 1013  | 
subsubsection \<open>\<open>femepty\<close>\<close>  | 
| 53953 | 1014  | 
|
1015  | 
lemma fempty_ffilter[simp]: "ffilter (\<lambda>_. False) A = {||}"
 | 
|
1016  | 
by transfer auto  | 
|
1017  | 
||
1018  | 
(* FIXME, transferred doesn't work here *)  | 
|
1019  | 
lemma femptyE [elim!]: "a |\<in>| {||} \<Longrightarrow> P"
 | 
|
1020  | 
by simp  | 
|
1021  | 
||
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1022  | 
|
| 61585 | 1023  | 
subsubsection \<open>\<open>fset\<close>\<close>  | 
| 53953 | 1024  | 
|
| 
78102
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
1025  | 
lemma fset_simps[simp]:  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
1026  | 
  "fset {||} = {}"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
1027  | 
"fset (finsert x X) = insert x (fset X)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
1028  | 
by (rule bot_fset.rep_eq finsert.rep_eq)+  | 
| 53953 | 1029  | 
|
| 63331 | 1030  | 
lemma finite_fset [simp]:  | 
| 53953 | 1031  | 
shows "finite (fset S)"  | 
1032  | 
by transfer simp  | 
|
1033  | 
||
| 53963 | 1034  | 
lemmas fset_cong = fset_inject  | 
| 53953 | 1035  | 
|
1036  | 
lemma filter_fset [simp]:  | 
|
1037  | 
shows "fset (ffilter P xs) = Collect P \<inter> fset xs"  | 
|
1038  | 
by transfer auto  | 
|
1039  | 
||
| 
78102
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
1040  | 
lemma inter_fset[simp]: "fset (A |\<inter>| B) = fset A \<inter> fset B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
1041  | 
by (rule inf_fset.rep_eq)  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
1042  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
1043  | 
lemma union_fset[simp]: "fset (A |\<union>| B) = fset A \<union> fset B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
1044  | 
by (rule sup_fset.rep_eq)  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
1045  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
1046  | 
lemma minus_fset[simp]: "fset (A |-| B) = fset A - fset B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
1047  | 
by (rule minus_fset.rep_eq)  | 
| 53953 | 1048  | 
|
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1049  | 
|
| 63622 | 1050  | 
subsubsection \<open>\<open>ffilter\<close>\<close>  | 
| 53953 | 1051  | 
|
| 63331 | 1052  | 
lemma subset_ffilter:  | 
| 53953 | 1053  | 
"ffilter P A |\<subseteq>| ffilter Q A = (\<forall> x. x |\<in>| A \<longrightarrow> P x \<longrightarrow> Q x)"  | 
1054  | 
by transfer auto  | 
|
1055  | 
||
| 63331 | 1056  | 
lemma eq_ffilter:  | 
| 53953 | 1057  | 
"(ffilter P A = ffilter Q A) = (\<forall>x. x |\<in>| A \<longrightarrow> P x = Q x)"  | 
1058  | 
by transfer auto  | 
|
1059  | 
||
| 53964 | 1060  | 
lemma pfsubset_ffilter:  | 
| 67091 | 1061  | 
"(\<And>x. x |\<in>| A \<Longrightarrow> P x \<Longrightarrow> Q x) \<Longrightarrow> (x |\<in>| A \<and> \<not> P x \<and> Q x) \<Longrightarrow>  | 
| 53953 | 1062  | 
ffilter P A |\<subset>| ffilter Q A"  | 
1063  | 
unfolding less_fset_def by (auto simp add: subset_ffilter eq_ffilter)  | 
|
1064  | 
||
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1065  | 
|
| 63622 | 1066  | 
subsubsection \<open>\<open>fset_of_list\<close>\<close>  | 
1067  | 
||
1068  | 
lemma fset_of_list_filter[simp]:  | 
|
1069  | 
"fset_of_list (filter P xs) = ffilter P (fset_of_list xs)"  | 
|
1070  | 
by transfer (auto simp: Set.filter_def)  | 
|
1071  | 
||
1072  | 
lemma fset_of_list_subset[intro]:  | 
|
1073  | 
"set xs \<subseteq> set ys \<Longrightarrow> fset_of_list xs |\<subseteq>| fset_of_list ys"  | 
|
1074  | 
by transfer simp  | 
|
1075  | 
||
1076  | 
lemma fset_of_list_elem: "(x |\<in>| fset_of_list xs) \<longleftrightarrow> (x \<in> set xs)"  | 
|
1077  | 
by transfer simp  | 
|
1078  | 
||
1079  | 
||
| 61585 | 1080  | 
subsubsection \<open>\<open>finsert\<close>\<close>  | 
| 53953 | 1081  | 
|
1082  | 
(* FIXME, transferred doesn't work here *)  | 
|
1083  | 
lemma set_finsert:  | 
|
1084  | 
assumes "x |\<in>| A"  | 
|
1085  | 
obtains B where "A = finsert x B" and "x |\<notin>| B"  | 
|
1086  | 
using assms by transfer (metis Set.set_insert finite_insert)  | 
|
1087  | 
||
1088  | 
lemma mk_disjoint_finsert: "a |\<in>| A \<Longrightarrow> \<exists>B. A = finsert a B \<and> a |\<notin>| B"  | 
|
| 63649 | 1089  | 
  by (rule exI [where x = "A |-| {|a|}"]) blast
 | 
| 53953 | 1090  | 
|
| 
66264
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1091  | 
lemma finsert_eq_iff:  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1092  | 
assumes "a |\<notin>| A" and "b |\<notin>| B"  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1093  | 
shows "(finsert a A = finsert b B) =  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1094  | 
(if a = b then A = B else \<exists>C. A = finsert b C \<and> b |\<notin>| C \<and> B = finsert a C \<and> a |\<notin>| C)"  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1095  | 
using assms by transfer (force simp: insert_eq_iff)  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1096  | 
|
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1097  | 
|
| 61585 | 1098  | 
subsubsection \<open>\<open>fimage\<close>\<close>  | 
| 53953 | 1099  | 
|
1100  | 
lemma subset_fimage_iff: "(B |\<subseteq>| f|`|A) = (\<exists> AA. AA |\<subseteq>| A \<and> B = f|`|AA)"  | 
|
1101  | 
by transfer (metis mem_Collect_eq rev_finite_subset subset_image_iff)  | 
|
1102  | 
||
| 76269 | 1103  | 
lemma fimage_strict_mono:  | 
1104  | 
assumes "inj_on f (fset B)" and "A |\<subset>| B"  | 
|
1105  | 
shows "f |`| A |\<subset>| f |`| B"  | 
|
| 
76281
 
457f1cba78fb
renamed lemma inj_on_strict_subset to image_strict_mono for symmetry with image_mono and to distinguish from inj_on_subset
 
desharna 
parents: 
76269 
diff
changeset
 | 
1106  | 
  \<comment> \<open>TODO: Configure transfer framework to lift @{thm Fun.image_strict_mono}.\<close>
 | 
| 76269 | 1107  | 
proof (rule pfsubsetI)  | 
1108  | 
from \<open>A |\<subset>| B\<close> have "A |\<subseteq>| B"  | 
|
1109  | 
by (rule pfsubset_imp_fsubset)  | 
|
1110  | 
thus "f |`| A |\<subseteq>| f |`| B"  | 
|
1111  | 
by (rule fimage_mono)  | 
|
1112  | 
next  | 
|
1113  | 
from \<open>A |\<subset>| B\<close> have "A |\<subseteq>| B" and "A \<noteq> B"  | 
|
1114  | 
by (simp_all add: pfsubset_eq)  | 
|
1115  | 
||
1116  | 
have "fset A \<noteq> fset B"  | 
|
1117  | 
using \<open>A \<noteq> B\<close>  | 
|
1118  | 
by (simp add: fset_cong)  | 
|
1119  | 
hence "f ` fset A \<noteq> f ` fset B"  | 
|
1120  | 
using \<open>A |\<subseteq>| B\<close>  | 
|
1121  | 
by (simp add: inj_on_image_eq_iff[OF \<open>inj_on f (fset B)\<close>] less_eq_fset.rep_eq)  | 
|
1122  | 
hence "fset (f |`| A) \<noteq> fset (f |`| B)"  | 
|
1123  | 
by (simp add: fimage.rep_eq)  | 
|
1124  | 
thus "f |`| A \<noteq> f |`| B"  | 
|
1125  | 
by (simp add: fset_cong)  | 
|
1126  | 
qed  | 
|
1127  | 
||
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1128  | 
|
| 60500 | 1129  | 
subsubsection \<open>bounded quantification\<close>  | 
| 53953 | 1130  | 
|
1131  | 
lemma bex_simps [simp, no_atp]:  | 
|
| 63331 | 1132  | 
"\<And>A P Q. fBex A (\<lambda>x. P x \<and> Q) = (fBex A P \<and> Q)"  | 
| 53953 | 1133  | 
"\<And>A P Q. fBex A (\<lambda>x. P \<and> Q x) = (P \<and> fBex A Q)"  | 
| 63331 | 1134  | 
  "\<And>P. fBex {||} P = False"
 | 
| 53953 | 1135  | 
"\<And>a B P. fBex (finsert a B) P = (P a \<or> fBex B P)"  | 
1136  | 
"\<And>A P f. fBex (f |`| A) P = fBex A (\<lambda>x. P (f x))"  | 
|
1137  | 
"\<And>A P. (\<not> fBex A P) = fBall A (\<lambda>x. \<not> P x)"  | 
|
1138  | 
by auto  | 
|
1139  | 
||
1140  | 
lemma ball_simps [simp, no_atp]:  | 
|
1141  | 
"\<And>A P Q. fBall A (\<lambda>x. P x \<or> Q) = (fBall A P \<or> Q)"  | 
|
1142  | 
"\<And>A P Q. fBall A (\<lambda>x. P \<or> Q x) = (P \<or> fBall A Q)"  | 
|
1143  | 
"\<And>A P Q. fBall A (\<lambda>x. P \<longrightarrow> Q x) = (P \<longrightarrow> fBall A Q)"  | 
|
1144  | 
"\<And>A P Q. fBall A (\<lambda>x. P x \<longrightarrow> Q) = (fBex A P \<longrightarrow> Q)"  | 
|
1145  | 
  "\<And>P. fBall {||} P = True"
 | 
|
1146  | 
"\<And>a B P. fBall (finsert a B) P = (P a \<and> fBall B P)"  | 
|
1147  | 
"\<And>A P f. fBall (f |`| A) P = fBall A (\<lambda>x. P (f x))"  | 
|
1148  | 
"\<And>A P. (\<not> fBall A P) = fBex A (\<lambda>x. \<not> P x)"  | 
|
1149  | 
by auto  | 
|
1150  | 
||
1151  | 
lemma atomize_fBall:  | 
|
1152  | 
"(\<And>x. x |\<in>| A ==> P x) == Trueprop (fBall A (\<lambda>x. P x))"  | 
|
1153  | 
apply (simp only: atomize_all atomize_imp)  | 
|
1154  | 
apply (rule equal_intr_rule)  | 
|
| 63622 | 1155  | 
by (transfer, simp)+  | 
1156  | 
||
1157  | 
lemma fBall_mono[mono]: "P \<le> Q \<Longrightarrow> fBall S P \<le> fBall S Q"  | 
|
1158  | 
by auto  | 
|
1159  | 
||
| 
68463
 
410818a69ee3
material on finite sets and maps
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
67829 
diff
changeset
 | 
1160  | 
lemma fBex_mono[mono]: "P \<le> Q \<Longrightarrow> fBex S P \<le> fBex S Q"  | 
| 
 
410818a69ee3
material on finite sets and maps
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
67829 
diff
changeset
 | 
1161  | 
by auto  | 
| 53953 | 1162  | 
|
| 53963 | 1163  | 
end  | 
1164  | 
||
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1165  | 
|
| 61585 | 1166  | 
subsubsection \<open>\<open>fcard\<close>\<close>  | 
| 53963 | 1167  | 
|
| 53964 | 1168  | 
(* FIXME: improve transferred to handle bounded meta quantification *)  | 
1169  | 
||
| 53963 | 1170  | 
lemma fcard_fempty:  | 
1171  | 
  "fcard {||} = 0"
 | 
|
| 
72302
 
d7d90ed4c74e
fixed some remarkably ugly proofs
 
paulson <lp15@cam.ac.uk> 
parents: 
69712 
diff
changeset
 | 
1172  | 
by transfer (rule card.empty)  | 
| 53963 | 1173  | 
|
1174  | 
lemma fcard_finsert_disjoint:  | 
|
1175  | 
"x |\<notin>| A \<Longrightarrow> fcard (finsert x A) = Suc (fcard A)"  | 
|
1176  | 
by transfer (rule card_insert_disjoint)  | 
|
1177  | 
||
1178  | 
lemma fcard_finsert_if:  | 
|
1179  | 
"fcard (finsert x A) = (if x |\<in>| A then fcard A else Suc (fcard A))"  | 
|
1180  | 
by transfer (rule card_insert_if)  | 
|
1181  | 
||
| 66265 | 1182  | 
lemma fcard_0_eq [simp, no_atp]:  | 
| 53963 | 1183  | 
  "fcard A = 0 \<longleftrightarrow> A = {||}"
 | 
1184  | 
by transfer (rule card_0_eq)  | 
|
1185  | 
||
1186  | 
lemma fcard_Suc_fminus1:  | 
|
1187  | 
  "x |\<in>| A \<Longrightarrow> Suc (fcard (A |-| {|x|})) = fcard A"
 | 
|
1188  | 
by transfer (rule card_Suc_Diff1)  | 
|
1189  | 
||
1190  | 
lemma fcard_fminus_fsingleton:  | 
|
1191  | 
  "x |\<in>| A \<Longrightarrow> fcard (A |-| {|x|}) = fcard A - 1"
 | 
|
1192  | 
by transfer (rule card_Diff_singleton)  | 
|
1193  | 
||
1194  | 
lemma fcard_fminus_fsingleton_if:  | 
|
1195  | 
  "fcard (A |-| {|x|}) = (if x |\<in>| A then fcard A - 1 else fcard A)"
 | 
|
1196  | 
by transfer (rule card_Diff_singleton_if)  | 
|
1197  | 
||
1198  | 
lemma fcard_fminus_finsert[simp]:  | 
|
1199  | 
assumes "a |\<in>| A" and "a |\<notin>| B"  | 
|
1200  | 
shows "fcard (A |-| finsert a B) = fcard (A |-| B) - 1"  | 
|
1201  | 
using assms by transfer (rule card_Diff_insert)  | 
|
1202  | 
||
1203  | 
lemma fcard_finsert: "fcard (finsert x A) = Suc (fcard (A |-| {|x|}))"
 | 
|
| 
72302
 
d7d90ed4c74e
fixed some remarkably ugly proofs
 
paulson <lp15@cam.ac.uk> 
parents: 
69712 
diff
changeset
 | 
1204  | 
by transfer (rule card.insert_remove)  | 
| 53963 | 1205  | 
|
1206  | 
lemma fcard_finsert_le: "fcard A \<le> fcard (finsert x A)"  | 
|
1207  | 
by transfer (rule card_insert_le)  | 
|
1208  | 
||
1209  | 
lemma fcard_mono:  | 
|
1210  | 
"A |\<subseteq>| B \<Longrightarrow> fcard A \<le> fcard B"  | 
|
1211  | 
by transfer (rule card_mono)  | 
|
1212  | 
||
1213  | 
lemma fcard_seteq: "A |\<subseteq>| B \<Longrightarrow> fcard B \<le> fcard A \<Longrightarrow> A = B"  | 
|
1214  | 
by transfer (rule card_seteq)  | 
|
1215  | 
||
1216  | 
lemma pfsubset_fcard_mono: "A |\<subset>| B \<Longrightarrow> fcard A < fcard B"  | 
|
1217  | 
by transfer (rule psubset_card_mono)  | 
|
1218  | 
||
| 63331 | 1219  | 
lemma fcard_funion_finter:  | 
| 53963 | 1220  | 
"fcard A + fcard B = fcard (A |\<union>| B) + fcard (A |\<inter>| B)"  | 
1221  | 
by transfer (rule card_Un_Int)  | 
|
1222  | 
||
1223  | 
lemma fcard_funion_disjoint:  | 
|
1224  | 
  "A |\<inter>| B = {||} \<Longrightarrow> fcard (A |\<union>| B) = fcard A + fcard B"
 | 
|
1225  | 
by transfer (rule card_Un_disjoint)  | 
|
1226  | 
||
1227  | 
lemma fcard_funion_fsubset:  | 
|
1228  | 
"B |\<subseteq>| A \<Longrightarrow> fcard (A |-| B) = fcard A - fcard B"  | 
|
1229  | 
by transfer (rule card_Diff_subset)  | 
|
1230  | 
||
1231  | 
lemma diff_fcard_le_fcard_fminus:  | 
|
1232  | 
"fcard A - fcard B \<le> fcard(A |-| B)"  | 
|
1233  | 
by transfer (rule diff_card_le_card_Diff)  | 
|
1234  | 
||
1235  | 
lemma fcard_fminus1_less: "x |\<in>| A \<Longrightarrow> fcard (A |-| {|x|}) < fcard A"
 | 
|
1236  | 
by transfer (rule card_Diff1_less)  | 
|
1237  | 
||
1238  | 
lemma fcard_fminus2_less:  | 
|
1239  | 
  "x |\<in>| A \<Longrightarrow> y |\<in>| A \<Longrightarrow> fcard (A |-| {|x|} |-| {|y|}) < fcard A"
 | 
|
1240  | 
by transfer (rule card_Diff2_less)  | 
|
1241  | 
||
1242  | 
lemma fcard_fminus1_le: "fcard (A |-| {|x|}) \<le> fcard A"
 | 
|
1243  | 
by transfer (rule card_Diff1_le)  | 
|
1244  | 
||
1245  | 
lemma fcard_pfsubset: "A |\<subseteq>| B \<Longrightarrow> fcard A < fcard B \<Longrightarrow> A < B"  | 
|
1246  | 
by transfer (rule card_psubset)  | 
|
1247  | 
||
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1248  | 
|
| 
68463
 
410818a69ee3
material on finite sets and maps
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
67829 
diff
changeset
 | 
1249  | 
subsubsection \<open>\<open>sorted_list_of_fset\<close>\<close>  | 
| 
 
410818a69ee3
material on finite sets and maps
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
67829 
diff
changeset
 | 
1250  | 
|
| 
 
410818a69ee3
material on finite sets and maps
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
67829 
diff
changeset
 | 
1251  | 
lemma sorted_list_of_fset_simps[simp]:  | 
| 
 
410818a69ee3
material on finite sets and maps
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
67829 
diff
changeset
 | 
1252  | 
"set (sorted_list_of_fset S) = fset S"  | 
| 
 
410818a69ee3
material on finite sets and maps
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
67829 
diff
changeset
 | 
1253  | 
"fset_of_list (sorted_list_of_fset S) = S"  | 
| 
 
410818a69ee3
material on finite sets and maps
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
67829 
diff
changeset
 | 
1254  | 
by (transfer, simp)+  | 
| 
 
410818a69ee3
material on finite sets and maps
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
67829 
diff
changeset
 | 
1255  | 
|
| 
 
410818a69ee3
material on finite sets and maps
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
67829 
diff
changeset
 | 
1256  | 
|
| 61585 | 1257  | 
subsubsection \<open>\<open>ffold\<close>\<close>  | 
| 53963 | 1258  | 
|
1259  | 
(* FIXME: improve transferred to handle bounded meta quantification *)  | 
|
1260  | 
||
1261  | 
context comp_fun_commute  | 
|
1262  | 
begin  | 
|
| 
78102
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
1263  | 
  lemma ffold_empty[simp]: "ffold f z {||} = z"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
1264  | 
by (rule fold_empty[Transfer.transferred])  | 
| 53963 | 1265  | 
|
1266  | 
lemma ffold_finsert [simp]:  | 
|
1267  | 
assumes "x |\<notin>| A"  | 
|
1268  | 
shows "ffold f z (finsert x A) = f x (ffold f z A)"  | 
|
1269  | 
using assms by (transfer fixing: f) (rule fold_insert)  | 
|
1270  | 
||
1271  | 
lemma ffold_fun_left_comm:  | 
|
1272  | 
"f x (ffold f z A) = ffold f (f x z) A"  | 
|
1273  | 
by (transfer fixing: f) (rule fold_fun_left_comm)  | 
|
1274  | 
||
1275  | 
lemma ffold_finsert2:  | 
|
| 56646 | 1276  | 
"x |\<notin>| A \<Longrightarrow> ffold f z (finsert x A) = ffold f (f x z) A"  | 
| 53963 | 1277  | 
by (transfer fixing: f) (rule fold_insert2)  | 
1278  | 
||
1279  | 
lemma ffold_rec:  | 
|
1280  | 
assumes "x |\<in>| A"  | 
|
1281  | 
    shows "ffold f z A = f x (ffold f z (A |-| {|x|}))"
 | 
|
1282  | 
using assms by (transfer fixing: f) (rule fold_rec)  | 
|
| 63331 | 1283  | 
|
| 53963 | 1284  | 
lemma ffold_finsert_fremove:  | 
1285  | 
    "ffold f z (finsert x A) = f x (ffold f z (A |-| {|x|}))"
 | 
|
1286  | 
by (transfer fixing: f) (rule fold_insert_remove)  | 
|
1287  | 
end  | 
|
1288  | 
||
1289  | 
lemma ffold_fimage:  | 
|
1290  | 
assumes "inj_on g (fset A)"  | 
|
1291  | 
shows "ffold f z (g |`| A) = ffold (f \<circ> g) z A"  | 
|
1292  | 
using assms by transfer' (rule fold_image)  | 
|
1293  | 
||
1294  | 
lemma ffold_cong:  | 
|
1295  | 
assumes "comp_fun_commute f" "comp_fun_commute g"  | 
|
1296  | 
"\<And>x. x |\<in>| A \<Longrightarrow> f x = g x"  | 
|
1297  | 
and "s = t" and "A = B"  | 
|
1298  | 
shows "ffold f s A = ffold g t B"  | 
|
| 73832 | 1299  | 
using assms[unfolded comp_fun_commute_def']  | 
1300  | 
by transfer (meson Finite_Set.fold_cong subset_UNIV)  | 
|
| 53963 | 1301  | 
|
1302  | 
context comp_fun_idem  | 
|
1303  | 
begin  | 
|
1304  | 
||
1305  | 
lemma ffold_finsert_idem:  | 
|
| 56646 | 1306  | 
"ffold f z (finsert x A) = f x (ffold f z A)"  | 
| 53963 | 1307  | 
by (transfer fixing: f) (rule fold_insert_idem)  | 
| 63331 | 1308  | 
|
| 53963 | 1309  | 
declare ffold_finsert [simp del] ffold_finsert_idem [simp]  | 
| 63331 | 1310  | 
|
| 53963 | 1311  | 
lemma ffold_finsert_idem2:  | 
1312  | 
"ffold f z (finsert x A) = ffold f (f x z) A"  | 
|
1313  | 
by (transfer fixing: f) (rule fold_insert_idem2)  | 
|
1314  | 
||
1315  | 
end  | 
|
1316  | 
||
| 
66292
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1317  | 
|
| 76268 | 1318  | 
subsubsection \<open>@{term fsubset}\<close>
 | 
1319  | 
||
1320  | 
lemma wfP_pfsubset: "wfP (|\<subset>|)"  | 
|
1321  | 
proof (rule wfP_if_convertible_to_nat)  | 
|
1322  | 
show "\<And>x y. x |\<subset>| y \<Longrightarrow> fcard x < fcard y"  | 
|
1323  | 
by (rule pfsubset_fcard_mono)  | 
|
1324  | 
qed  | 
|
1325  | 
||
1326  | 
||
| 
66292
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1327  | 
subsubsection \<open>Group operations\<close>  | 
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1328  | 
|
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1329  | 
locale comm_monoid_fset = comm_monoid  | 
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1330  | 
begin  | 
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1331  | 
|
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1332  | 
sublocale set: comm_monoid_set ..  | 
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1333  | 
|
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1334  | 
lift_definition F :: "('b \<Rightarrow> 'a) \<Rightarrow> 'b fset \<Rightarrow> 'a" is set.F .
 | 
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1335  | 
|
| 
78102
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
1336  | 
lemma cong[fundef_cong]: "A = B \<Longrightarrow> (\<And>x. x |\<in>| B \<Longrightarrow> g x = h x) \<Longrightarrow> F g A = F h B"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
1337  | 
by (rule set.cong[Transfer.transferred])  | 
| 66261 | 1338  | 
|
| 69654 | 1339  | 
lemma cong_simp[cong]:  | 
| 69164 | 1340  | 
"\<lbrakk> A = B; \<And>x. x |\<in>| B =simp=> g x = h x \<rbrakk> \<Longrightarrow> F g A = F h B"  | 
1341  | 
unfolding simp_implies_def by (auto cong: cong)  | 
|
| 
66292
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1342  | 
|
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1343  | 
end  | 
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1344  | 
|
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1345  | 
context comm_monoid_add begin  | 
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1346  | 
|
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1347  | 
sublocale fsum: comm_monoid_fset plus 0  | 
| 67764 | 1348  | 
rewrites "comm_monoid_set.F plus 0 = sum"  | 
| 
66292
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1349  | 
defines fsum = fsum.F  | 
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1350  | 
proof -  | 
| 67399 | 1351  | 
show "comm_monoid_fset (+) 0" by standard  | 
| 
66292
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1352  | 
|
| 67399 | 1353  | 
show "comm_monoid_set.F (+) 0 = sum" unfolding sum_def ..  | 
| 
66292
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1354  | 
qed  | 
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1355  | 
|
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1356  | 
end  | 
| 66261 | 1357  | 
|
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1358  | 
|
| 
66264
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1359  | 
subsubsection \<open>Semilattice operations\<close>  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1360  | 
|
| 
66292
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1361  | 
locale semilattice_fset = semilattice  | 
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1362  | 
begin  | 
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1363  | 
|
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1364  | 
sublocale set: semilattice_set ..  | 
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1365  | 
|
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1366  | 
lift_definition F :: "'a fset \<Rightarrow> 'a" is set.F .  | 
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1367  | 
|
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1368  | 
lemma eq_fold: "F (finsert x A) = ffold f x A"  | 
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1369  | 
by transfer (rule set.eq_fold)  | 
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1370  | 
|
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1371  | 
lemma singleton [simp]: "F {|x|} = x"
 | 
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1372  | 
by transfer (rule set.singleton)  | 
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1373  | 
|
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1374  | 
lemma insert_not_elem: "x |\<notin>| A \<Longrightarrow> A \<noteq> {||} \<Longrightarrow> F (finsert x A) = x \<^bold>* F A"
 | 
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1375  | 
by transfer (rule set.insert_not_elem)  | 
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1376  | 
|
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1377  | 
lemma in_idem: "x |\<in>| A \<Longrightarrow> x \<^bold>* F A = F A"  | 
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1378  | 
by transfer (rule set.in_idem)  | 
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1379  | 
|
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1380  | 
lemma insert [simp]: "A \<noteq> {||} \<Longrightarrow> F (finsert x A) = x \<^bold>* F A"
 | 
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1381  | 
by transfer (rule set.insert)  | 
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1382  | 
|
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1383  | 
end  | 
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1384  | 
|
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1385  | 
locale semilattice_order_fset = binary?: semilattice_order + semilattice_fset  | 
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1386  | 
begin  | 
| 
66264
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1387  | 
|
| 
66292
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1388  | 
end  | 
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1389  | 
|
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1390  | 
|
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1391  | 
context linorder begin  | 
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1392  | 
|
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1393  | 
sublocale fMin: semilattice_order_fset min less_eq less  | 
| 67764 | 1394  | 
rewrites "semilattice_set.F min = Min"  | 
| 
66292
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1395  | 
defines fMin = fMin.F  | 
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1396  | 
proof -  | 
| 67399 | 1397  | 
show "semilattice_order_fset min (\<le>) (<)" by standard  | 
| 
66292
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1398  | 
|
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1399  | 
show "semilattice_set.F min = Min" unfolding Min_def ..  | 
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1400  | 
qed  | 
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1401  | 
|
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1402  | 
sublocale fMax: semilattice_order_fset max greater_eq greater  | 
| 67764 | 1403  | 
rewrites "semilattice_set.F max = Max"  | 
| 
66292
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1404  | 
defines fMax = fMax.F  | 
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1405  | 
proof -  | 
| 67399 | 1406  | 
show "semilattice_order_fset max (\<ge>) (>)"  | 
| 
66292
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1407  | 
by standard  | 
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1408  | 
|
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1409  | 
show "semilattice_set.F max = Max"  | 
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1410  | 
unfolding Max_def ..  | 
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1411  | 
qed  | 
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1412  | 
|
| 
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1413  | 
end  | 
| 
66264
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1414  | 
|
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1415  | 
lemma mono_fMax_commute: "mono f \<Longrightarrow> A \<noteq> {||} \<Longrightarrow> f (fMax A) = fMax (f |`| A)"
 | 
| 
66292
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1416  | 
by transfer (rule mono_Max_commute)  | 
| 
66264
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1417  | 
|
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1418  | 
lemma mono_fMin_commute: "mono f \<Longrightarrow> A \<noteq> {||} \<Longrightarrow> f (fMin A) = fMin (f |`| A)"
 | 
| 
66292
 
9930f4cf6c7a
improve setup for fMin/fMax/fsum; courtesy of Ondřej Kunčar & Florian Haftmann
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66265 
diff
changeset
 | 
1419  | 
by transfer (rule mono_Min_commute)  | 
| 
66264
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1420  | 
|
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1421  | 
lemma fMax_in[simp]: "A \<noteq> {||} \<Longrightarrow> fMax A |\<in>| A"
 | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1422  | 
by transfer (rule Max_in)  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1423  | 
|
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1424  | 
lemma fMin_in[simp]: "A \<noteq> {||} \<Longrightarrow> fMin A |\<in>| A"
 | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1425  | 
by transfer (rule Min_in)  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1426  | 
|
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1427  | 
lemma fMax_ge[simp]: "x |\<in>| A \<Longrightarrow> x \<le> fMax A"  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1428  | 
by transfer (rule Max_ge)  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1429  | 
|
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1430  | 
lemma fMin_le[simp]: "x |\<in>| A \<Longrightarrow> fMin A \<le> x"  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1431  | 
by transfer (rule Min_le)  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1432  | 
|
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1433  | 
lemma fMax_eqI: "(\<And>y. y |\<in>| A \<Longrightarrow> y \<le> x) \<Longrightarrow> x |\<in>| A \<Longrightarrow> fMax A = x"  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1434  | 
by transfer (rule Max_eqI)  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1435  | 
|
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1436  | 
lemma fMin_eqI: "(\<And>y. y |\<in>| A \<Longrightarrow> x \<le> y) \<Longrightarrow> x |\<in>| A \<Longrightarrow> fMin A = x"  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1437  | 
by transfer (rule Min_eqI)  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1438  | 
|
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1439  | 
lemma fMax_finsert[simp]: "fMax (finsert x A) = (if A = {||} then x else max x (fMax A))"
 | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1440  | 
by transfer simp  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1441  | 
|
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1442  | 
lemma fMin_finsert[simp]: "fMin (finsert x A) = (if A = {||} then x else min x (fMin A))"
 | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1443  | 
by transfer simp  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1444  | 
|
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1445  | 
context linorder begin  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1446  | 
|
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1447  | 
lemma fset_linorder_max_induct[case_names fempty finsert]:  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1448  | 
  assumes "P {||}"
 | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1449  | 
and "\<And>x S. \<lbrakk>\<forall>y. y |\<in>| S \<longrightarrow> y < x; P S\<rbrakk> \<Longrightarrow> P (finsert x S)"  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1450  | 
shows "P S"  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1451  | 
proof -  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1452  | 
(* FIXME transfer and right_total vs. bi_total *)  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1453  | 
note Domainp_forall_transfer[transfer_rule]  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1454  | 
show ?thesis  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1455  | 
using assms by (transfer fixing: less) (auto intro: finite_linorder_max_induct)  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1456  | 
qed  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1457  | 
|
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1458  | 
lemma fset_linorder_min_induct[case_names fempty finsert]:  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1459  | 
  assumes "P {||}"
 | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1460  | 
and "\<And>x S. \<lbrakk>\<forall>y. y |\<in>| S \<longrightarrow> y > x; P S\<rbrakk> \<Longrightarrow> P (finsert x S)"  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1461  | 
shows "P S"  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1462  | 
proof -  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1463  | 
(* FIXME transfer and right_total vs. bi_total *)  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1464  | 
note Domainp_forall_transfer[transfer_rule]  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1465  | 
show ?thesis  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1466  | 
using assms by (transfer fixing: less) (auto intro: finite_linorder_min_induct)  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1467  | 
qed  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1468  | 
|
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1469  | 
end  | 
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1470  | 
|
| 
 
d516da3e7c42
material from $AFP/Formula_Derivatives/FSet_More
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66262 
diff
changeset
 | 
1471  | 
|
| 60500 | 1472  | 
subsection \<open>Choice in fsets\<close>  | 
| 53953 | 1473  | 
|
| 63331 | 1474  | 
lemma fset_choice:  | 
| 53953 | 1475  | 
assumes "\<forall>x. x |\<in>| A \<longrightarrow> (\<exists>y. P x y)"  | 
1476  | 
shows "\<exists>f. \<forall>x. x |\<in>| A \<longrightarrow> P x (f x)"  | 
|
1477  | 
using assms by transfer metis  | 
|
1478  | 
||
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1479  | 
|
| 60500 | 1480  | 
subsection \<open>Induction and Cases rules for fsets\<close>  | 
| 53953 | 1481  | 
|
1482  | 
lemma fset_exhaust [case_names empty insert, cases type: fset]:  | 
|
| 63331 | 1483  | 
  assumes fempty_case: "S = {||} \<Longrightarrow> P"
 | 
| 53953 | 1484  | 
and finsert_case: "\<And>x S'. S = finsert x S' \<Longrightarrow> P"  | 
1485  | 
shows "P"  | 
|
1486  | 
using assms by transfer blast  | 
|
1487  | 
||
1488  | 
lemma fset_induct [case_names empty insert]:  | 
|
1489  | 
  assumes fempty_case: "P {||}"
 | 
|
1490  | 
and finsert_case: "\<And>x S. P S \<Longrightarrow> P (finsert x S)"  | 
|
1491  | 
shows "P S"  | 
|
1492  | 
proof -  | 
|
1493  | 
(* FIXME transfer and right_total vs. bi_total *)  | 
|
1494  | 
note Domainp_forall_transfer[transfer_rule]  | 
|
1495  | 
show ?thesis  | 
|
1496  | 
using assms by transfer (auto intro: finite_induct)  | 
|
1497  | 
qed  | 
|
1498  | 
||
1499  | 
lemma fset_induct_stronger [case_names empty insert, induct type: fset]:  | 
|
1500  | 
  assumes empty_fset_case: "P {||}"
 | 
|
1501  | 
and insert_fset_case: "\<And>x S. \<lbrakk>x |\<notin>| S; P S\<rbrakk> \<Longrightarrow> P (finsert x S)"  | 
|
1502  | 
shows "P S"  | 
|
1503  | 
proof -  | 
|
1504  | 
(* FIXME transfer and right_total vs. bi_total *)  | 
|
1505  | 
note Domainp_forall_transfer[transfer_rule]  | 
|
1506  | 
show ?thesis  | 
|
1507  | 
using assms by transfer (auto intro: finite_induct)  | 
|
1508  | 
qed  | 
|
1509  | 
||
1510  | 
lemma fset_card_induct:  | 
|
1511  | 
  assumes empty_fset_case: "P {||}"
 | 
|
1512  | 
and card_fset_Suc_case: "\<And>S T. Suc (fcard S) = (fcard T) \<Longrightarrow> P S \<Longrightarrow> P T"  | 
|
1513  | 
shows "P S"  | 
|
1514  | 
proof (induct S)  | 
|
1515  | 
case empty  | 
|
1516  | 
  show "P {||}" by (rule empty_fset_case)
 | 
|
1517  | 
next  | 
|
1518  | 
case (insert x S)  | 
|
1519  | 
have h: "P S" by fact  | 
|
1520  | 
have "x |\<notin>| S" by fact  | 
|
| 63331 | 1521  | 
then have "Suc (fcard S) = fcard (finsert x S)"  | 
| 53953 | 1522  | 
by transfer auto  | 
| 63331 | 1523  | 
then show "P (finsert x S)"  | 
| 53953 | 1524  | 
using h card_fset_Suc_case by simp  | 
1525  | 
qed  | 
|
1526  | 
||
1527  | 
lemma fset_strong_cases:  | 
|
1528  | 
  obtains "xs = {||}"
 | 
|
1529  | 
| ys x where "x |\<notin>| ys" and "xs = finsert x ys"  | 
|
1530  | 
by transfer blast  | 
|
1531  | 
||
1532  | 
lemma fset_induct2:  | 
|
1533  | 
  "P {||} {||} \<Longrightarrow>
 | 
|
1534  | 
  (\<And>x xs. x |\<notin>| xs \<Longrightarrow> P (finsert x xs) {||}) \<Longrightarrow>
 | 
|
1535  | 
  (\<And>y ys. y |\<notin>| ys \<Longrightarrow> P {||} (finsert y ys)) \<Longrightarrow>
 | 
|
1536  | 
(\<And>x xs y ys. \<lbrakk>P xs ys; x |\<notin>| xs; y |\<notin>| ys\<rbrakk> \<Longrightarrow> P (finsert x xs) (finsert y ys)) \<Longrightarrow>  | 
|
1537  | 
P xsa ysa"  | 
|
1538  | 
apply (induct xsa arbitrary: ysa)  | 
|
1539  | 
apply (induct_tac x rule: fset_induct_stronger)  | 
|
1540  | 
apply simp_all  | 
|
1541  | 
apply (induct_tac xa rule: fset_induct_stronger)  | 
|
1542  | 
apply simp_all  | 
|
1543  | 
done  | 
|
1544  | 
||
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1545  | 
|
| 78132 | 1546  | 
subsection \<open>Lemmas depending on induction\<close>  | 
1547  | 
||
1548  | 
lemma ffUnion_fsubset_iff: "ffUnion A |\<subseteq>| B \<longleftrightarrow> fBall A (\<lambda>x. x |\<subseteq>| B)"  | 
|
1549  | 
by (induction A) simp_all  | 
|
1550  | 
||
1551  | 
||
| 60500 | 1552  | 
subsection \<open>Setup for Lifting/Transfer\<close>  | 
| 53953 | 1553  | 
|
| 60500 | 1554  | 
subsubsection \<open>Relator and predicator properties\<close>  | 
| 53953 | 1555  | 
|
| 55938 | 1556  | 
lift_definition rel_fset :: "('a \<Rightarrow> 'b \<Rightarrow> bool) \<Rightarrow> 'a fset \<Rightarrow> 'b fset \<Rightarrow> bool" is rel_set
 | 
1557  | 
parametric rel_set_transfer .  | 
|
| 53953 | 1558  | 
|
| 63331 | 1559  | 
lemma rel_fset_alt_def: "rel_fset R = (\<lambda>A B. (\<forall>x.\<exists>y. x|\<in>|A \<longrightarrow> y|\<in>|B \<and> R x y)  | 
| 53953 | 1560  | 
\<and> (\<forall>y. \<exists>x. y|\<in>|B \<longrightarrow> x|\<in>|A \<and> R x y))"  | 
1561  | 
apply (rule ext)+  | 
|
1562  | 
apply transfer'  | 
|
| 63331 | 1563  | 
apply (subst rel_set_def[unfolded fun_eq_iff])  | 
| 53953 | 1564  | 
by blast  | 
1565  | 
||
| 55938 | 1566  | 
lemma finite_rel_set:  | 
| 53953 | 1567  | 
assumes fin: "finite X" "finite Z"  | 
| 55938 | 1568  | 
assumes R_S: "rel_set (R OO S) X Z"  | 
1569  | 
shows "\<exists>Y. finite Y \<and> rel_set R X Y \<and> rel_set S Y Z"  | 
|
| 53953 | 1570  | 
proof -  | 
1571  | 
obtain f where f: "\<forall>x\<in>X. R x (f x) \<and> (\<exists>z\<in>Z. S (f x) z)"  | 
|
1572  | 
apply atomize_elim  | 
|
1573  | 
apply (subst bchoice_iff[symmetric])  | 
|
| 55938 | 1574  | 
using R_S[unfolded rel_set_def OO_def] by blast  | 
| 63331 | 1575  | 
|
| 56646 | 1576  | 
obtain g where g: "\<forall>z\<in>Z. S (g z) z \<and> (\<exists>x\<in>X. R x (g z))"  | 
| 53953 | 1577  | 
apply atomize_elim  | 
1578  | 
apply (subst bchoice_iff[symmetric])  | 
|
| 55938 | 1579  | 
using R_S[unfolded rel_set_def OO_def] by blast  | 
| 63331 | 1580  | 
|
| 53953 | 1581  | 
let ?Y = "f ` X \<union> g ` Z"  | 
1582  | 
have "finite ?Y" by (simp add: fin)  | 
|
| 55938 | 1583  | 
moreover have "rel_set R X ?Y"  | 
1584  | 
unfolding rel_set_def  | 
|
| 53953 | 1585  | 
using f g by clarsimp blast  | 
| 55938 | 1586  | 
moreover have "rel_set S ?Y Z"  | 
1587  | 
unfolding rel_set_def  | 
|
| 53953 | 1588  | 
using f g by clarsimp blast  | 
1589  | 
ultimately show ?thesis by metis  | 
|
1590  | 
qed  | 
|
1591  | 
||
| 60500 | 1592  | 
subsubsection \<open>Transfer rules for the Transfer package\<close>  | 
| 53953 | 1593  | 
|
| 60500 | 1594  | 
text \<open>Unconditional transfer rules\<close>  | 
| 53953 | 1595  | 
|
| 63343 | 1596  | 
context includes lifting_syntax  | 
| 53963 | 1597  | 
begin  | 
1598  | 
||
| 
78102
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
1599  | 
lemma fempty_transfer [transfer_rule]:  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
1600  | 
  "rel_fset A {||} {||}"
 | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
1601  | 
by (rule empty_transfer[Transfer.transferred])  | 
| 53953 | 1602  | 
|
1603  | 
lemma finsert_transfer [transfer_rule]:  | 
|
| 55933 | 1604  | 
"(A ===> rel_fset A ===> rel_fset A) finsert finsert"  | 
| 55945 | 1605  | 
unfolding rel_fun_def rel_fset_alt_def by blast  | 
| 53953 | 1606  | 
|
1607  | 
lemma funion_transfer [transfer_rule]:  | 
|
| 55933 | 1608  | 
"(rel_fset A ===> rel_fset A ===> rel_fset A) funion funion"  | 
| 55945 | 1609  | 
unfolding rel_fun_def rel_fset_alt_def by blast  | 
| 53953 | 1610  | 
|
1611  | 
lemma ffUnion_transfer [transfer_rule]:  | 
|
| 55933 | 1612  | 
"(rel_fset (rel_fset A) ===> rel_fset A) ffUnion ffUnion"  | 
| 55945 | 1613  | 
unfolding rel_fun_def rel_fset_alt_def by transfer (simp, fast)  | 
| 53953 | 1614  | 
|
1615  | 
lemma fimage_transfer [transfer_rule]:  | 
|
| 55933 | 1616  | 
"((A ===> B) ===> rel_fset A ===> rel_fset B) fimage fimage"  | 
| 55945 | 1617  | 
unfolding rel_fun_def rel_fset_alt_def by simp blast  | 
| 53953 | 1618  | 
|
1619  | 
lemma fBall_transfer [transfer_rule]:  | 
|
| 67399 | 1620  | 
"(rel_fset A ===> (A ===> (=)) ===> (=)) fBall fBall"  | 
| 55945 | 1621  | 
unfolding rel_fset_alt_def rel_fun_def by blast  | 
| 53953 | 1622  | 
|
1623  | 
lemma fBex_transfer [transfer_rule]:  | 
|
| 67399 | 1624  | 
"(rel_fset A ===> (A ===> (=)) ===> (=)) fBex fBex"  | 
| 55945 | 1625  | 
unfolding rel_fset_alt_def rel_fun_def by blast  | 
| 53953 | 1626  | 
|
1627  | 
(* FIXME transfer doesn't work here *)  | 
|
1628  | 
lemma fPow_transfer [transfer_rule]:  | 
|
| 55933 | 1629  | 
"(rel_fset A ===> rel_fset (rel_fset A)) fPow fPow"  | 
| 55945 | 1630  | 
unfolding rel_fun_def  | 
1631  | 
using Pow_transfer[unfolded rel_fun_def, rule_format, Transfer.transferred]  | 
|
| 53953 | 1632  | 
by blast  | 
1633  | 
||
| 55933 | 1634  | 
lemma rel_fset_transfer [transfer_rule]:  | 
| 67399 | 1635  | 
"((A ===> B ===> (=)) ===> rel_fset A ===> rel_fset B ===> (=))  | 
| 55933 | 1636  | 
rel_fset rel_fset"  | 
| 55945 | 1637  | 
unfolding rel_fun_def  | 
1638  | 
using rel_set_transfer[unfolded rel_fun_def,rule_format, Transfer.transferred, where A = A and B = B]  | 
|
| 53953 | 1639  | 
by simp  | 
1640  | 
||
1641  | 
lemma bind_transfer [transfer_rule]:  | 
|
| 55933 | 1642  | 
"(rel_fset A ===> (A ===> rel_fset B) ===> rel_fset B) fbind fbind"  | 
| 63092 | 1643  | 
unfolding rel_fun_def  | 
| 55945 | 1644  | 
using bind_transfer[unfolded rel_fun_def, rule_format, Transfer.transferred] by blast  | 
| 53953 | 1645  | 
|
| 60500 | 1646  | 
text \<open>Rules requiring bi-unique, bi-total or right-total relations\<close>  | 
| 53953 | 1647  | 
|
1648  | 
lemma fmember_transfer [transfer_rule]:  | 
|
1649  | 
assumes "bi_unique A"  | 
|
| 67399 | 1650  | 
shows "(A ===> rel_fset A ===> (=)) (|\<in>|) (|\<in>|)"  | 
| 55945 | 1651  | 
using assms unfolding rel_fun_def rel_fset_alt_def bi_unique_def by metis  | 
| 53953 | 1652  | 
|
1653  | 
lemma finter_transfer [transfer_rule]:  | 
|
1654  | 
assumes "bi_unique A"  | 
|
| 55933 | 1655  | 
shows "(rel_fset A ===> rel_fset A ===> rel_fset A) finter finter"  | 
| 55945 | 1656  | 
using assms unfolding rel_fun_def  | 
1657  | 
using inter_transfer[unfolded rel_fun_def, rule_format, Transfer.transferred] by blast  | 
|
| 53953 | 1658  | 
|
| 53963 | 1659  | 
lemma fminus_transfer [transfer_rule]:  | 
| 53953 | 1660  | 
assumes "bi_unique A"  | 
| 67399 | 1661  | 
shows "(rel_fset A ===> rel_fset A ===> rel_fset A) (|-|) (|-|)"  | 
| 55945 | 1662  | 
using assms unfolding rel_fun_def  | 
1663  | 
using Diff_transfer[unfolded rel_fun_def, rule_format, Transfer.transferred] by blast  | 
|
| 53953 | 1664  | 
|
1665  | 
lemma fsubset_transfer [transfer_rule]:  | 
|
1666  | 
assumes "bi_unique A"  | 
|
| 67399 | 1667  | 
shows "(rel_fset A ===> rel_fset A ===> (=)) (|\<subseteq>|) (|\<subseteq>|)"  | 
| 55945 | 1668  | 
using assms unfolding rel_fun_def  | 
1669  | 
using subset_transfer[unfolded rel_fun_def, rule_format, Transfer.transferred] by blast  | 
|
| 53953 | 1670  | 
|
1671  | 
lemma fSup_transfer [transfer_rule]:  | 
|
| 55938 | 1672  | 
"bi_unique A \<Longrightarrow> (rel_set (rel_fset A) ===> rel_fset A) Sup Sup"  | 
| 63092 | 1673  | 
unfolding rel_fun_def  | 
| 53953 | 1674  | 
apply clarify  | 
1675  | 
apply transfer'  | 
|
| 55945 | 1676  | 
using Sup_fset_transfer[unfolded rel_fun_def] by blast  | 
| 53953 | 1677  | 
|
1678  | 
(* FIXME: add right_total_fInf_transfer *)  | 
|
1679  | 
||
1680  | 
lemma fInf_transfer [transfer_rule]:  | 
|
1681  | 
assumes "bi_unique A" and "bi_total A"  | 
|
| 55938 | 1682  | 
shows "(rel_set (rel_fset A) ===> rel_fset A) Inf Inf"  | 
| 55945 | 1683  | 
using assms unfolding rel_fun_def  | 
| 53953 | 1684  | 
apply clarify  | 
1685  | 
apply transfer'  | 
|
| 55945 | 1686  | 
using Inf_fset_transfer[unfolded rel_fun_def] by blast  | 
| 53953 | 1687  | 
|
1688  | 
lemma ffilter_transfer [transfer_rule]:  | 
|
1689  | 
assumes "bi_unique A"  | 
|
| 67399 | 1690  | 
shows "((A ===> (=)) ===> rel_fset A ===> rel_fset A) ffilter ffilter"  | 
| 55945 | 1691  | 
using assms unfolding rel_fun_def  | 
1692  | 
using Lifting_Set.filter_transfer[unfolded rel_fun_def, rule_format, Transfer.transferred] by blast  | 
|
| 53953 | 1693  | 
|
1694  | 
lemma card_transfer [transfer_rule]:  | 
|
| 67399 | 1695  | 
"bi_unique A \<Longrightarrow> (rel_fset A ===> (=)) fcard fcard"  | 
| 63092 | 1696  | 
unfolding rel_fun_def  | 
| 55945 | 1697  | 
using card_transfer[unfolded rel_fun_def, rule_format, Transfer.transferred] by blast  | 
| 53953 | 1698  | 
|
1699  | 
end  | 
|
1700  | 
||
1701  | 
lifting_update fset.lifting  | 
|
1702  | 
lifting_forget fset.lifting  | 
|
1703  | 
||
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1704  | 
|
| 60500 | 1705  | 
subsection \<open>BNF setup\<close>  | 
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1706  | 
|
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1707  | 
context  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1708  | 
includes fset.lifting  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1709  | 
begin  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1710  | 
|
| 55933 | 1711  | 
lemma rel_fset_alt:  | 
1712  | 
"rel_fset R a b \<longleftrightarrow> (\<forall>t \<in> fset a. \<exists>u \<in> fset b. R t u) \<and> (\<forall>t \<in> fset b. \<exists>u \<in> fset a. R u t)"  | 
|
| 55938 | 1713  | 
by transfer (simp add: rel_set_def)  | 
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1714  | 
|
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1715  | 
lemma fset_to_fset: "finite A \<Longrightarrow> fset (the_inv fset A) = A"  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1716  | 
apply (rule f_the_inv_into_f[unfolded inj_on_def])  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1717  | 
apply (simp add: fset_inject)  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1718  | 
apply (rule range_eqI Abs_fset_inverse[symmetric] CollectI)+  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1719  | 
.  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1720  | 
|
| 55933 | 1721  | 
lemma rel_fset_aux:  | 
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1722  | 
"(\<forall>t \<in> fset a. \<exists>u \<in> fset b. R t u) \<and> (\<forall>u \<in> fset b. \<exists>t \<in> fset a. R t u) \<longleftrightarrow>  | 
| 57398 | 1723  | 
 ((BNF_Def.Grp {a. fset a \<subseteq> {(a, b). R a b}} (fimage fst))\<inverse>\<inverse> OO
 | 
1724  | 
  BNF_Def.Grp {a. fset a \<subseteq> {(a, b). R a b}} (fimage snd)) a b" (is "?L = ?R")
 | 
|
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1725  | 
proof  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1726  | 
assume ?L  | 
| 63040 | 1727  | 
define R' where "R' =  | 
1728  | 
the_inv fset (Collect (case_prod R) \<inter> (fset a \<times> fset b))" (is "_ = the_inv fset ?L'")  | 
|
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1729  | 
have "finite ?L'" by (intro finite_Int[OF disjI2] finite_cartesian_product) (transfer, simp)+  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1730  | 
hence *: "fset R' = ?L'" unfolding R'_def by (intro fset_to_fset)  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1731  | 
show ?R unfolding Grp_def relcompp.simps conversep.simps  | 
| 
55414
 
eab03e9cee8a
renamed '{prod,sum,bool,unit}_case' to 'case_...'
 
blanchet 
parents: 
55129 
diff
changeset
 | 
1732  | 
proof (intro CollectI case_prodI exI[of _ a] exI[of _ b] exI[of _ R'] conjI refl)  | 
| 60500 | 1733  | 
from * show "a = fimage fst R'" using conjunct1[OF \<open>?L\<close>]  | 
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1734  | 
by (transfer, auto simp add: image_def Int_def split: prod.splits)  | 
| 60500 | 1735  | 
from * show "b = fimage snd R'" using conjunct2[OF \<open>?L\<close>]  | 
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1736  | 
by (transfer, auto simp add: image_def Int_def split: prod.splits)  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1737  | 
qed (auto simp add: *)  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1738  | 
next  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1739  | 
assume ?R thus ?L unfolding Grp_def relcompp.simps conversep.simps  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1740  | 
apply (simp add: subset_eq Ball_def)  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1741  | 
apply (rule conjI)  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1742  | 
apply (transfer, clarsimp, metis snd_conv)  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1743  | 
by (transfer, clarsimp, metis fst_conv)  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1744  | 
qed  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1745  | 
|
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1746  | 
bnf "'a fset"  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1747  | 
map: fimage  | 
| 63331 | 1748  | 
sets: fset  | 
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1749  | 
bd: natLeq  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1750  | 
  wits: "{||}"
 | 
| 55933 | 1751  | 
rel: rel_fset  | 
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1752  | 
apply -  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1753  | 
apply transfer' apply simp  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1754  | 
apply transfer' apply force  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1755  | 
apply transfer apply force  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1756  | 
apply transfer' apply force  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1757  | 
apply (rule natLeq_card_order)  | 
| 75624 | 1758  | 
apply (rule natLeq_cinfinite)  | 
1759  | 
apply (rule regularCard_natLeq)  | 
|
1760  | 
apply transfer apply (metis finite_iff_ordLess_natLeq)  | 
|
| 55933 | 1761  | 
apply (fastforce simp: rel_fset_alt)  | 
| 62324 | 1762  | 
apply (simp add: Grp_def relcompp.simps conversep.simps fun_eq_iff rel_fset_alt  | 
| 63331 | 1763  | 
rel_fset_aux[unfolded OO_Grp_alt])  | 
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1764  | 
apply transfer apply simp  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1765  | 
done  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1766  | 
|
| 55938 | 1767  | 
lemma rel_fset_fset: "rel_set \<chi> (fset A1) (fset A2) = rel_fset \<chi> A1 A2"  | 
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1768  | 
by transfer (rule refl)  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1769  | 
|
| 53953 | 1770  | 
end  | 
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1771  | 
|
| 
78102
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
1772  | 
declare  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
1773  | 
fset.map_comp[simp]  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
1774  | 
fset.map_id[simp]  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
1775  | 
fset.set_map[simp]  | 
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1776  | 
|
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1777  | 
|
| 60500 | 1778  | 
subsection \<open>Size setup\<close>  | 
| 56646 | 1779  | 
|
1780  | 
context includes fset.lifting begin  | 
|
| 64267 | 1781  | 
lift_definition size_fset :: "('a \<Rightarrow> nat) \<Rightarrow> 'a fset \<Rightarrow> nat" is "\<lambda>f. sum (Suc \<circ> f)" .
 | 
| 56646 | 1782  | 
end  | 
1783  | 
||
1784  | 
instantiation fset :: (type) size begin  | 
|
1785  | 
definition size_fset where  | 
|
1786  | 
size_fset_overloaded_def: "size_fset = FSet.size_fset (\<lambda>_. 0)"  | 
|
1787  | 
instance ..  | 
|
1788  | 
end  | 
|
1789  | 
||
| 
78102
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
1790  | 
lemma size_fset_simps[simp]: "size_fset f X = (\<Sum>x \<in> fset X. Suc (f x))"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
1791  | 
by (rule size_fset_def[THEN meta_eq_to_obj_eq, THEN fun_cong, THEN fun_cong,  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
1792  | 
unfolded map_fun_def comp_def id_apply])  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
1793  | 
|
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
1794  | 
lemma size_fset_overloaded_simps[simp]: "size X = (\<Sum>x \<in> fset X. Suc 0)"  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
1795  | 
by (rule size_fset_simps[of "\<lambda>_. 0", unfolded add_0_left add_0_right,  | 
| 
 
f40bc75b2a3f
replaced some lemmas' implicit formulas by explicit ones to avoid silent changes
 
desharna 
parents: 
76305 
diff
changeset
 | 
1796  | 
folded size_fset_overloaded_def])  | 
| 56646 | 1797  | 
|
1798  | 
lemma fset_size_o_map: "inj f \<Longrightarrow> size_fset g \<circ> fimage f = size_fset (g \<circ> f)"  | 
|
| 
60228
 
32dd7adba5a4
tuned proof; forget the transfer rule for size_fset
 
kuncar 
parents: 
58881 
diff
changeset
 | 
1799  | 
apply (subst fun_eq_iff)  | 
| 64267 | 1800  | 
including fset.lifting by transfer (auto intro: sum.reindex_cong subset_inj_on)  | 
| 63331 | 1801  | 
|
| 60500 | 1802  | 
setup \<open>  | 
| 69593 | 1803  | 
BNF_LFP_Size.register_size_global \<^type_name>\<open>fset\<close> \<^const_name>\<open>size_fset\<close>  | 
| 62082 | 1804  | 
  @{thm size_fset_overloaded_def} @{thms size_fset_simps size_fset_overloaded_simps}
 | 
1805  | 
  @{thms fset_size_o_map}
 | 
|
| 60500 | 1806  | 
\<close>  | 
| 56646 | 1807  | 
|
| 
60228
 
32dd7adba5a4
tuned proof; forget the transfer rule for size_fset
 
kuncar 
parents: 
58881 
diff
changeset
 | 
1808  | 
lifting_update fset.lifting  | 
| 
 
32dd7adba5a4
tuned proof; forget the transfer rule for size_fset
 
kuncar 
parents: 
58881 
diff
changeset
 | 
1809  | 
lifting_forget fset.lifting  | 
| 56646 | 1810  | 
|
| 60500 | 1811  | 
subsection \<open>Advanced relator customization\<close>  | 
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1812  | 
|
| 67408 | 1813  | 
text \<open>Set vs. sum relators:\<close>  | 
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1814  | 
|
| 63331 | 1815  | 
lemma rel_set_rel_sum[simp]:  | 
1816  | 
"rel_set (rel_sum \<chi> \<phi>) A1 A2 \<longleftrightarrow>  | 
|
| 55938 | 1817  | 
rel_set \<chi> (Inl -` A1) (Inl -` A2) \<and> rel_set \<phi> (Inr -` A1) (Inr -` A2)"  | 
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1818  | 
(is "?L \<longleftrightarrow> ?Rl \<and> ?Rr")  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1819  | 
proof safe  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1820  | 
assume L: "?L"  | 
| 55938 | 1821  | 
show ?Rl unfolding rel_set_def Bex_def vimage_eq proof safe  | 
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1822  | 
fix l1 assume "Inl l1 \<in> A1"  | 
| 55943 | 1823  | 
then obtain a2 where a2: "a2 \<in> A2" and "rel_sum \<chi> \<phi> (Inl l1) a2"  | 
| 55938 | 1824  | 
using L unfolding rel_set_def by auto  | 
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1825  | 
then obtain l2 where "a2 = Inl l2 \<and> \<chi> l1 l2" by (cases a2, auto)  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1826  | 
thus "\<exists> l2. Inl l2 \<in> A2 \<and> \<chi> l1 l2" using a2 by auto  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1827  | 
next  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1828  | 
fix l2 assume "Inl l2 \<in> A2"  | 
| 55943 | 1829  | 
then obtain a1 where a1: "a1 \<in> A1" and "rel_sum \<chi> \<phi> a1 (Inl l2)"  | 
| 55938 | 1830  | 
using L unfolding rel_set_def by auto  | 
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1831  | 
then obtain l1 where "a1 = Inl l1 \<and> \<chi> l1 l2" by (cases a1, auto)  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1832  | 
thus "\<exists> l1. Inl l1 \<in> A1 \<and> \<chi> l1 l2" using a1 by auto  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1833  | 
qed  | 
| 55938 | 1834  | 
show ?Rr unfolding rel_set_def Bex_def vimage_eq proof safe  | 
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1835  | 
fix r1 assume "Inr r1 \<in> A1"  | 
| 55943 | 1836  | 
then obtain a2 where a2: "a2 \<in> A2" and "rel_sum \<chi> \<phi> (Inr r1) a2"  | 
| 55938 | 1837  | 
using L unfolding rel_set_def by auto  | 
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1838  | 
then obtain r2 where "a2 = Inr r2 \<and> \<phi> r1 r2" by (cases a2, auto)  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1839  | 
thus "\<exists> r2. Inr r2 \<in> A2 \<and> \<phi> r1 r2" using a2 by auto  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1840  | 
next  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1841  | 
fix r2 assume "Inr r2 \<in> A2"  | 
| 55943 | 1842  | 
then obtain a1 where a1: "a1 \<in> A1" and "rel_sum \<chi> \<phi> a1 (Inr r2)"  | 
| 55938 | 1843  | 
using L unfolding rel_set_def by auto  | 
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1844  | 
then obtain r1 where "a1 = Inr r1 \<and> \<phi> r1 r2" by (cases a1, auto)  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1845  | 
thus "\<exists> r1. Inr r1 \<in> A1 \<and> \<phi> r1 r2" using a1 by auto  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1846  | 
qed  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1847  | 
next  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1848  | 
assume Rl: "?Rl" and Rr: "?Rr"  | 
| 55938 | 1849  | 
show ?L unfolding rel_set_def Bex_def vimage_eq proof safe  | 
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1850  | 
fix a1 assume a1: "a1 \<in> A1"  | 
| 55943 | 1851  | 
show "\<exists> a2. a2 \<in> A2 \<and> rel_sum \<chi> \<phi> a1 a2"  | 
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1852  | 
proof(cases a1)  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1853  | 
case (Inl l1) then obtain l2 where "Inl l2 \<in> A2 \<and> \<chi> l1 l2"  | 
| 55938 | 1854  | 
using Rl a1 unfolding rel_set_def by blast  | 
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1855  | 
thus ?thesis unfolding Inl by auto  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1856  | 
next  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1857  | 
case (Inr r1) then obtain r2 where "Inr r2 \<in> A2 \<and> \<phi> r1 r2"  | 
| 55938 | 1858  | 
using Rr a1 unfolding rel_set_def by blast  | 
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1859  | 
thus ?thesis unfolding Inr by auto  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1860  | 
qed  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1861  | 
next  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1862  | 
fix a2 assume a2: "a2 \<in> A2"  | 
| 55943 | 1863  | 
show "\<exists> a1. a1 \<in> A1 \<and> rel_sum \<chi> \<phi> a1 a2"  | 
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1864  | 
proof(cases a2)  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1865  | 
case (Inl l2) then obtain l1 where "Inl l1 \<in> A1 \<and> \<chi> l1 l2"  | 
| 55938 | 1866  | 
using Rl a2 unfolding rel_set_def by blast  | 
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1867  | 
thus ?thesis unfolding Inl by auto  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1868  | 
next  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1869  | 
case (Inr r2) then obtain r1 where "Inr r1 \<in> A1 \<and> \<phi> r1 r2"  | 
| 55938 | 1870  | 
using Rr a2 unfolding rel_set_def by blast  | 
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1871  | 
thus ?thesis unfolding Inr by auto  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1872  | 
qed  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1873  | 
qed  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1874  | 
qed  | 
| 
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1875  | 
|
| 
60712
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1876  | 
|
| 
66262
 
4a2c9d32e7aa
finite sets are countable
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66261 
diff
changeset
 | 
1877  | 
subsubsection \<open>Countability\<close>  | 
| 
 
4a2c9d32e7aa
finite sets are countable
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66261 
diff
changeset
 | 
1878  | 
|
| 
 
4a2c9d32e7aa
finite sets are countable
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66261 
diff
changeset
 | 
1879  | 
lemma exists_fset_of_list: "\<exists>xs. fset_of_list xs = S"  | 
| 
 
4a2c9d32e7aa
finite sets are countable
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66261 
diff
changeset
 | 
1880  | 
including fset.lifting  | 
| 
 
4a2c9d32e7aa
finite sets are countable
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66261 
diff
changeset
 | 
1881  | 
by transfer (rule finite_list)  | 
| 
 
4a2c9d32e7aa
finite sets are countable
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66261 
diff
changeset
 | 
1882  | 
|
| 
 
4a2c9d32e7aa
finite sets are countable
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66261 
diff
changeset
 | 
1883  | 
lemma fset_of_list_surj[simp, intro]: "surj fset_of_list"  | 
| 
 
4a2c9d32e7aa
finite sets are countable
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66261 
diff
changeset
 | 
1884  | 
proof -  | 
| 
 
4a2c9d32e7aa
finite sets are countable
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66261 
diff
changeset
 | 
1885  | 
have "x \<in> range fset_of_list" for x :: "'a fset"  | 
| 
 
4a2c9d32e7aa
finite sets are countable
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66261 
diff
changeset
 | 
1886  | 
unfolding image_iff  | 
| 
 
4a2c9d32e7aa
finite sets are countable
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66261 
diff
changeset
 | 
1887  | 
using exists_fset_of_list by fastforce  | 
| 
 
4a2c9d32e7aa
finite sets are countable
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66261 
diff
changeset
 | 
1888  | 
thus ?thesis by auto  | 
| 
 
4a2c9d32e7aa
finite sets are countable
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66261 
diff
changeset
 | 
1889  | 
qed  | 
| 
 
4a2c9d32e7aa
finite sets are countable
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66261 
diff
changeset
 | 
1890  | 
|
| 
 
4a2c9d32e7aa
finite sets are countable
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66261 
diff
changeset
 | 
1891  | 
instance fset :: (countable) countable  | 
| 
 
4a2c9d32e7aa
finite sets are countable
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66261 
diff
changeset
 | 
1892  | 
proof  | 
| 
 
4a2c9d32e7aa
finite sets are countable
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66261 
diff
changeset
 | 
1893  | 
obtain to_nat :: "'a list \<Rightarrow> nat" where "inj to_nat"  | 
| 
 
4a2c9d32e7aa
finite sets are countable
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66261 
diff
changeset
 | 
1894  | 
by (metis ex_inj)  | 
| 
 
4a2c9d32e7aa
finite sets are countable
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66261 
diff
changeset
 | 
1895  | 
moreover have "inj (inv fset_of_list)"  | 
| 
 
4a2c9d32e7aa
finite sets are countable
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66261 
diff
changeset
 | 
1896  | 
using fset_of_list_surj by (rule surj_imp_inj_inv)  | 
| 
 
4a2c9d32e7aa
finite sets are countable
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66261 
diff
changeset
 | 
1897  | 
ultimately have "inj (to_nat \<circ> inv fset_of_list)"  | 
| 
69700
 
7a92cbec7030
new material about summations and powers, along with some tweaks
 
paulson <lp15@cam.ac.uk> 
parents: 
69654 
diff
changeset
 | 
1898  | 
by (rule inj_compose)  | 
| 
66262
 
4a2c9d32e7aa
finite sets are countable
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66261 
diff
changeset
 | 
1899  | 
thus "\<exists>to_nat::'a fset \<Rightarrow> nat. inj to_nat"  | 
| 
 
4a2c9d32e7aa
finite sets are countable
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66261 
diff
changeset
 | 
1900  | 
by auto  | 
| 
 
4a2c9d32e7aa
finite sets are countable
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66261 
diff
changeset
 | 
1901  | 
qed  | 
| 
 
4a2c9d32e7aa
finite sets are countable
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66261 
diff
changeset
 | 
1902  | 
|
| 
 
4a2c9d32e7aa
finite sets are countable
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
66261 
diff
changeset
 | 
1903  | 
|
| 
60712
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1904  | 
subsection \<open>Quickcheck setup\<close>  | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1905  | 
|
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1906  | 
text \<open>Setup adapted from sets.\<close>  | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1907  | 
|
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1908  | 
notation Quickcheck_Exhaustive.orelse (infixr "orelse" 55)  | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1909  | 
|
| 72607 | 1910  | 
context  | 
1911  | 
includes term_syntax  | 
|
1912  | 
begin  | 
|
1913  | 
||
1914  | 
definition [code_unfold]:  | 
|
| 
60712
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1915  | 
"valterm_femptyset = Code_Evaluation.valtermify ({||} :: ('a :: typerep) fset)"
 | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1916  | 
|
| 72607 | 1917  | 
definition [code_unfold]:  | 
| 
60712
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1918  | 
"valtermify_finsert x s = Code_Evaluation.valtermify finsert {\<cdot>} (x :: ('a :: typerep * _)) {\<cdot>} s"
 | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1919  | 
|
| 72607 | 1920  | 
end  | 
1921  | 
||
| 
60712
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1922  | 
instantiation fset :: (exhaustive) exhaustive  | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1923  | 
begin  | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1924  | 
|
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1925  | 
fun exhaustive_fset where  | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1926  | 
"exhaustive_fset f i = (if i = 0 then None else (f {||} orelse exhaustive_fset (\<lambda>A. f A orelse Quickcheck_Exhaustive.exhaustive (\<lambda>x. if x |\<in>| A then None else f (finsert x A)) (i - 1)) (i - 1)))"
 | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1927  | 
|
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1928  | 
instance ..  | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1929  | 
|
| 
55129
 
26bd1cba3ab5
killed 'More_BNFs' by moving its various bits where they (now) belong
 
blanchet 
parents: 
54258 
diff
changeset
 | 
1930  | 
end  | 
| 
60712
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1931  | 
|
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1932  | 
instantiation fset :: (full_exhaustive) full_exhaustive  | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1933  | 
begin  | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1934  | 
|
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1935  | 
fun full_exhaustive_fset where  | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1936  | 
"full_exhaustive_fset f i = (if i = 0 then None else (f valterm_femptyset orelse full_exhaustive_fset (\<lambda>A. f A orelse Quickcheck_Exhaustive.full_exhaustive (\<lambda>x. if fst x |\<in>| fst A then None else f (valtermify_finsert x A)) (i - 1)) (i - 1)))"  | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1937  | 
|
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1938  | 
instance ..  | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1939  | 
|
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1940  | 
end  | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1941  | 
|
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1942  | 
no_notation Quickcheck_Exhaustive.orelse (infixr "orelse" 55)  | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1943  | 
|
| 72581 | 1944  | 
instantiation fset :: (random) random  | 
1945  | 
begin  | 
|
| 
60712
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1946  | 
|
| 72581 | 1947  | 
context  | 
1948  | 
includes state_combinator_syntax  | 
|
| 
60712
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1949  | 
begin  | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1950  | 
|
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1951  | 
fun random_aux_fset :: "natural \<Rightarrow> natural \<Rightarrow> natural \<times> natural \<Rightarrow> ('a fset \<times> (unit \<Rightarrow> term)) \<times> natural \<times> natural" where
 | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1952  | 
"random_aux_fset 0 j = Quickcheck_Random.collapse (Random.select_weight [(1, Pair valterm_femptyset)])" |  | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1953  | 
"random_aux_fset (Code_Numeral.Suc i) j =  | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1954  | 
Quickcheck_Random.collapse (Random.select_weight  | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1955  | 
[(1, Pair valterm_femptyset),  | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1956  | 
(Code_Numeral.Suc i,  | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1957  | 
Quickcheck_Random.random j \<circ>\<rightarrow> (\<lambda>x. random_aux_fset i j \<circ>\<rightarrow> (\<lambda>s. Pair (valtermify_finsert x s))))])"  | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1958  | 
|
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1959  | 
lemma [code]:  | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1960  | 
"random_aux_fset i j =  | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1961  | 
Quickcheck_Random.collapse (Random.select_weight [(1, Pair valterm_femptyset),  | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1962  | 
(i, Quickcheck_Random.random j \<circ>\<rightarrow> (\<lambda>x. random_aux_fset (i - 1) j \<circ>\<rightarrow> (\<lambda>s. Pair (valtermify_finsert x s))))])"  | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1963  | 
proof (induct i rule: natural.induct)  | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1964  | 
case zero  | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1965  | 
show ?case by (subst select_weight_drop_zero[symmetric]) (simp add: less_natural_def)  | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1966  | 
next  | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1967  | 
case (Suc i)  | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1968  | 
show ?case by (simp only: random_aux_fset.simps Suc_natural_minus_one)  | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1969  | 
qed  | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1970  | 
|
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1971  | 
definition "random_fset i = random_aux_fset i i"  | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1972  | 
|
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1973  | 
instance ..  | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1974  | 
|
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1975  | 
end  | 
| 
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1976  | 
|
| 72581 | 1977  | 
end  | 
| 
60712
 
3ba16d28449d
Quickcheck setup for finite sets
 
Lars Hupel <lars.hupel@mytum.de> 
parents: 
60679 
diff
changeset
 | 
1978  | 
|
| 78118 | 1979  | 
|
1980  | 
subsection \<open>Code Generation Setup\<close>  | 
|
1981  | 
||
1982  | 
text \<open>The following @{attribute code_unfold} lemmas are so the pre-processor of the code generator
 | 
|
1983  | 
will perform conversions like, e.g.,  | 
|
1984  | 
@{lemma "x |\<in>| fimage f (fset_of_list xs) \<longleftrightarrow> x \<in> f ` set xs"
 | 
|
1985  | 
by (simp only: fimage.rep_eq fset_of_list.rep_eq)}.\<close>  | 
|
1986  | 
||
1987  | 
declare  | 
|
1988  | 
ffilter.rep_eq[code_unfold]  | 
|
1989  | 
fimage.rep_eq[code_unfold]  | 
|
1990  | 
finsert.rep_eq[code_unfold]  | 
|
1991  | 
fset_of_list.rep_eq[code_unfold]  | 
|
1992  | 
inf_fset.rep_eq[code_unfold]  | 
|
1993  | 
minus_fset.rep_eq[code_unfold]  | 
|
1994  | 
sup_fset.rep_eq[code_unfold]  | 
|
1995  | 
uminus_fset.rep_eq[code_unfold]  | 
|
1996  | 
||
| 67399 | 1997  | 
end  |