Nominal/Nominal2_FSet.thy
changeset 1782 27fec5fcfe67
parent 1774 c34347ec7ab3
child 1806 90095f23fc60
equal deleted inserted replaced
1781:6454f5c9d211 1782:27fec5fcfe67
    22 quotient_definition
    22 quotient_definition
    23   "permute_fset :: perm \<Rightarrow> 'a fset \<Rightarrow> 'a fset"
    23   "permute_fset :: perm \<Rightarrow> 'a fset \<Rightarrow> 'a fset"
    24 is
    24 is
    25   "permute :: perm \<Rightarrow> 'a list \<Rightarrow> 'a list"
    25   "permute :: perm \<Rightarrow> 'a list \<Rightarrow> 'a list"
    26 
    26 
    27 lemma permute_list_zero: "0 \<bullet> (x :: 'a list) = x"
    27 instance proof
    28   by (rule permute_zero)
    28   fix x :: "'a fset" and p q :: "perm"
    29 
    29   show "0 \<bullet> x = x"
    30 lemma permute_fset_zero: "0 \<bullet> (x :: 'a fset) = x"
    30     by (lifting permute_zero [where 'a="'a list"])
    31   by (lifting permute_list_zero)
    31   show "(p + q) \<bullet> x = p \<bullet> q \<bullet> x"
    32 
    32     by (lifting permute_plus [where 'a="'a list"])
    33 lemma permute_list_plus: "(p + q) \<bullet> (x :: 'a list) = p \<bullet> q \<bullet> x"
    33 qed
    34   by (rule permute_plus)
       
    35 
       
    36 lemma permute_fset_plus: "(p + q) \<bullet> (x :: 'a fset) = p \<bullet> q \<bullet> x"
       
    37   by (lifting permute_list_plus)
       
    38 
       
    39 instance
       
    40   apply default
       
    41   apply (rule permute_fset_zero)
       
    42   apply (rule permute_fset_plus)
       
    43   done
       
    44 
    34 
    45 end
    35 end
    46 
    36 
    47 lemma permute_fset[eqvt]:
    37 lemma permute_fset[eqvt]:
    48   "p \<bullet> ({||} :: 'a :: pt fset) = {||}"
    38   "p \<bullet> ({||} :: 'a :: pt fset) = {||}"