src/HOL/Library/FSet.thy
changeset 78103 0252d635bfb2
parent 78102 f40bc75b2a3f
child 78104 8122e865687e
equal deleted inserted replaced
78102:f40bc75b2a3f 78103:0252d635bfb2
   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"