src/HOL/Library/Dlist_Cset.thy
changeset 43971 892030194015
parent 43241 93b1183e43e5
child 44558 cc878a312673
equal deleted inserted replaced
43966:bb11faa6a79e 43971:892030194015
     5 theory Dlist_Cset
     5 theory Dlist_Cset
     6 imports Dlist List_Cset
     6 imports Dlist List_Cset
     7 begin
     7 begin
     8 
     8 
     9 definition Set :: "'a dlist \<Rightarrow> 'a Cset.set" where
     9 definition Set :: "'a dlist \<Rightarrow> 'a Cset.set" where
    10   "Set dxs = List_Cset.set (list_of_dlist dxs)"
    10   "Set dxs = Cset.set (list_of_dlist dxs)"
    11 
    11 
    12 definition Coset :: "'a dlist \<Rightarrow> 'a Cset.set" where
    12 definition Coset :: "'a dlist \<Rightarrow> 'a Cset.set" where
    13   "Coset dxs = List_Cset.coset (list_of_dlist dxs)"
    13   "Coset dxs = List_Cset.coset (list_of_dlist dxs)"
    14 
    14 
    15 code_datatype Set Coset
    15 code_datatype Set Coset
    25 declare map_set [code del]
    25 declare map_set [code del]
    26 declare filter_set [code del]
    26 declare filter_set [code del]
    27 declare forall_set [code del]
    27 declare forall_set [code del]
    28 declare exists_set [code del]
    28 declare exists_set [code del]
    29 declare card_set [code del]
    29 declare card_set [code del]
       
    30 declare List_Cset.single_set [code del]
       
    31 declare List_Cset.bind_set [code del]
       
    32 declare List_Cset.pred_of_cset_set [code del]
    30 declare inter_project [code del]
    33 declare inter_project [code del]
    31 declare subtract_remove [code del]
    34 declare subtract_remove [code del]
    32 declare union_insert [code del]
    35 declare union_insert [code del]
    33 declare Infimum_inf [code del]
    36 declare Infimum_inf [code del]
    34 declare Supremum_sup [code del]
    37 declare Supremum_sup [code del]
    48 lemma member_Coset [simp]:
    51 lemma member_Coset [simp]:
    49   "Cset.member (Coset dxs) = Not \<circ> List.member (list_of_dlist dxs)"
    52   "Cset.member (Coset dxs) = Not \<circ> List.member (list_of_dlist dxs)"
    50   by (simp add: Coset_def member_set not_set_compl)
    53   by (simp add: Coset_def member_set not_set_compl)
    51 
    54 
    52 lemma Set_dlist_of_list [code]:
    55 lemma Set_dlist_of_list [code]:
    53   "List_Cset.set xs = Set (dlist_of_list xs)"
    56   "Cset.set xs = Set (dlist_of_list xs)"
    54   by (rule Cset.set_eqI) simp
    57   by (rule Cset.set_eqI) simp
    55 
    58 
    56 lemma Coset_dlist_of_list [code]:
    59 lemma Coset_dlist_of_list [code]:
    57   "List_Cset.coset xs = Coset (dlist_of_list xs)"
    60   "List_Cset.coset xs = Coset (dlist_of_list xs)"
    58   by (rule Cset.set_eqI) simp
    61   by (rule Cset.set_eqI) simp
   135   "Supremum (Set As) = Dlist.foldr sup As bot"
   138   "Supremum (Set As) = Dlist.foldr sup As bot"
   136   by (simp only: Set_def Supremum_sup foldr_def sup.commute)
   139   by (simp only: Set_def Supremum_sup foldr_def sup.commute)
   137 
   140 
   138 end
   141 end
   139 
   142 
       
   143 declare Cset.single_code[code]
       
   144 
       
   145 lemma bind_set [code]:
       
   146   "Cset.bind (Dlist_Cset.Set xs) f = foldl (\<lambda>A x. sup A (f x)) Cset.empty (list_of_dlist xs)"
       
   147 by(simp add: List_Cset.bind_set Dlist_Cset.Set_def)
       
   148 hide_fact (open) bind_set
       
   149 
       
   150 lemma pred_of_cset_set [code]:
       
   151   "pred_of_cset (Dlist_Cset.Set xs) = foldr sup (map Predicate.single (list_of_dlist xs)) bot"
       
   152 by(simp add: List_Cset.pred_of_cset_set Dlist_Cset.Set_def)
       
   153 hide_fact (open) pred_of_cset_set
       
   154 
   140 end
   155 end