equal
deleted
inserted
replaced
49 We can define a linear order for the access modifiers. With Private yielding the |
49 We can define a linear order for the access modifiers. With Private yielding the |
50 most restrictive access and public the most liberal access policy: |
50 most restrictive access and public the most liberal access policy: |
51 Private < Package < Protected < Public |
51 Private < Package < Protected < Public |
52 *} |
52 *} |
53 |
53 |
54 instance acc_modi:: ord |
54 instance acc_modi:: ord .. |
55 by intro_classes |
|
56 |
55 |
57 defs (overloaded) |
56 defs (overloaded) |
58 less_acc_def: |
57 less_acc_def: |
59 "a < (b::acc_modi) |
58 "a < (b::acc_modi) |
60 \<equiv> (case a of |
59 \<equiv> (case a of |
64 | Public \<Rightarrow> False)" |
63 | Public \<Rightarrow> False)" |
65 le_acc_def: |
64 le_acc_def: |
66 "a \<le> (b::acc_modi) \<equiv> (a = b) \<or> (a < b)" |
65 "a \<le> (b::acc_modi) \<equiv> (a = b) \<or> (a < b)" |
67 |
66 |
68 instance acc_modi:: order |
67 instance acc_modi:: order |
69 proof (intro_classes) |
68 proof |
70 fix x y z::acc_modi |
69 fix x y z::acc_modi |
71 { |
70 { |
72 show "x \<le> x" \<spacespace>\<spacespace> -- reflexivity |
71 show "x \<le> x" \<spacespace>\<spacespace> -- reflexivity |
73 by (auto simp add: le_acc_def) |
72 by (auto simp add: le_acc_def) |
74 next |
73 next |
89 by (auto simp add: le_acc_def less_acc_def split add: acc_modi.split) |
88 by (auto simp add: le_acc_def less_acc_def split add: acc_modi.split) |
90 } |
89 } |
91 qed |
90 qed |
92 |
91 |
93 instance acc_modi:: linorder |
92 instance acc_modi:: linorder |
94 proof intro_classes |
93 proof |
95 fix x y:: acc_modi |
94 fix x y:: acc_modi |
96 show "x \<le> y \<or> y \<le> x" |
95 show "x \<le> y \<or> y \<le> x" |
97 by (auto simp add: less_acc_def le_acc_def split add: acc_modi.split) |
96 by (auto simp add: less_acc_def le_acc_def split add: acc_modi.split) |
98 qed |
97 qed |
99 |
98 |
236 |
235 |
237 axclass has_memberid < "type" |
236 axclass has_memberid < "type" |
238 consts |
237 consts |
239 memberid :: "'a::has_memberid \<Rightarrow> memberid" |
238 memberid :: "'a::has_memberid \<Rightarrow> memberid" |
240 |
239 |
241 instance memberdecl::has_memberid |
240 instance memberdecl::has_memberid .. |
242 by (intro_classes) |
|
243 |
241 |
244 defs (overloaded) |
242 defs (overloaded) |
245 memberdecl_memberid_def: |
243 memberdecl_memberid_def: |
246 "memberid m \<equiv> (case m of |
244 "memberid m \<equiv> (case m of |
247 fdecl (vn,f) \<Rightarrow> fid vn |
245 fdecl (vn,f) \<Rightarrow> fid vn |
257 by (simp add: memberdecl_memberid_def) |
255 by (simp add: memberdecl_memberid_def) |
258 |
256 |
259 lemma memberid_mdecl_simp1: "memberid (mdecl m) = mid (fst m)" |
257 lemma memberid_mdecl_simp1: "memberid (mdecl m) = mid (fst m)" |
260 by (cases m) (simp add: memberdecl_memberid_def) |
258 by (cases m) (simp add: memberdecl_memberid_def) |
261 |
259 |
262 instance * :: ("type","has_memberid") has_memberid |
260 instance * :: (type, has_memberid) has_memberid .. |
263 by (intro_classes) |
|
264 |
261 |
265 defs (overloaded) |
262 defs (overloaded) |
266 pair_memberid_def: |
263 pair_memberid_def: |
267 "memberid p \<equiv> memberid (snd p)" |
264 "memberid p \<equiv> memberid (snd p)" |
268 |
265 |