src/HOL/Bali/Decl.thy
changeset 12859 f63315dfffd4
parent 12858 6214f03d6d27
child 12925 99131847fb93
equal deleted inserted replaced
12858:6214f03d6d27 12859:f63315dfffd4
    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