168 |
168 |
169 translations |
169 translations |
170 "{|x, xs|}" == "CONST finsert x {|xs|}" |
170 "{|x, xs|}" == "CONST finsert x {|xs|}" |
171 "{|x|}" == "CONST finsert x {||}" |
171 "{|x|}" == "CONST finsert x {||}" |
172 |
172 |
173 lift_definition fmember :: "'a \<Rightarrow> 'a fset \<Rightarrow> bool" (infix "|\<in>|" 50) is Set.member |
173 abbreviation fmember :: "'a \<Rightarrow> 'a fset \<Rightarrow> bool" (infix "|\<in>|" 50) where |
174 parametric member_transfer . |
174 "a |\<in>| A \<equiv> a \<in> fset A" |
175 |
175 |
176 lemma fmember_iff_member_fset: "x |\<in>| A \<longleftrightarrow> x \<in> fset A" |
176 abbreviation notin_fset :: "'a \<Rightarrow> 'a fset \<Rightarrow> bool" (infix "|\<notin>|" 50) where |
177 by (rule fmember.rep_eq) |
177 "x |\<notin>| S \<equiv> \<not> (x |\<in>| S)" |
178 |
|
179 abbreviation notin_fset :: "'a \<Rightarrow> 'a fset \<Rightarrow> bool" (infix "|\<notin>|" 50) where "x |\<notin>| S \<equiv> \<not> (x |\<in>| S)" |
|
180 |
178 |
181 context includes lifting_syntax |
179 context includes lifting_syntax |
182 begin |
180 begin |
|
181 |
|
182 lemma fmember_transfer0[transfer_rule]: |
|
183 assumes [transfer_rule]: "bi_unique A" |
|
184 shows "(A ===> pcr_fset A ===> (=)) (\<in>) (|\<in>|)" |
|
185 by transfer_prover |
183 |
186 |
184 lift_definition ffilter :: "('a \<Rightarrow> bool) \<Rightarrow> 'a fset \<Rightarrow> 'a fset" is Set.filter |
187 lift_definition ffilter :: "('a \<Rightarrow> bool) \<Rightarrow> 'a fset \<Rightarrow> 'a fset" is Set.filter |
185 parametric Lifting_Set.filter_transfer unfolding Set.filter_def by simp |
188 parametric Lifting_Set.filter_transfer unfolding Set.filter_def by simp |
186 |
189 |
187 lift_definition fPow :: "'a fset \<Rightarrow> 'a fset fset" is Pow parametric Pow_transfer |
190 lift_definition fPow :: "'a fset \<Rightarrow> 'a fset fset" is Pow parametric Pow_transfer |
1008 lemmas fset_cong = fset_inject |
1011 lemmas fset_cong = fset_inject |
1009 |
1012 |
1010 lemma filter_fset [simp]: |
1013 lemma filter_fset [simp]: |
1011 shows "fset (ffilter P xs) = Collect P \<inter> fset xs" |
1014 shows "fset (ffilter P xs) = Collect P \<inter> fset xs" |
1012 by transfer auto |
1015 by transfer auto |
1013 |
|
1014 lemma notin_fset: "x |\<notin>| S \<longleftrightarrow> x \<notin> fset S" |
|
1015 by (simp add: fmember_iff_member_fset) |
|
1016 |
1016 |
1017 lemma inter_fset[simp]: "fset (A |\<inter>| B) = fset A \<inter> fset B" |
1017 lemma inter_fset[simp]: "fset (A |\<inter>| B) = fset A \<inter> fset B" |
1018 by (rule inf_fset.rep_eq) |
1018 by (rule inf_fset.rep_eq) |
1019 |
1019 |
1020 lemma union_fset[simp]: "fset (A |\<union>| B) = fset A \<union> fset B" |
1020 lemma union_fset[simp]: "fset (A |\<union>| B) = fset A \<union> fset B" |