equal
deleted
inserted
replaced
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 |