src/HOL/Nominal/Nominal.thy
changeset 22446 91951d4177d3
parent 22418 49e2d9744ae1
child 22500 8436bfd21bf3
equal deleted inserted replaced
22445:e4fd2d02391d 22446:91951d4177d3
  3049 
  3049 
  3050 (************************)
  3050 (************************)
  3051 (* Various eqvt-lemmas  *)
  3051 (* Various eqvt-lemmas  *)
  3052 
  3052 
  3053 lemma Zero_nat_eqvt:
  3053 lemma Zero_nat_eqvt:
  3054  shows "pi\<bullet> (0::nat) = 0" 
  3054   shows "pi\<bullet>(0::nat) = 0" 
  3055 by (auto simp add: perm_nat_def)
  3055 by (auto simp add: perm_nat_def)
  3056 
  3056 
  3057 lemma One_nat_eqvt:
  3057 lemma One_nat_eqvt:
  3058  shows "pi\<bullet> (1::nat) = 1"
  3058   shows "pi\<bullet>(1::nat) = 1"
  3059 by (simp add: perm_nat_def)
  3059 by (simp add: perm_nat_def)
  3060 
  3060 
  3061 lemma Suc_eqvt:
  3061 lemma Suc_eqvt:
  3062  shows "pi\<bullet> Suc x = Suc (pi\<bullet>x)" 
  3062   shows "pi\<bullet>(Suc x) = Suc (pi\<bullet>x)" 
  3063 by (auto simp add: perm_nat_def)
  3063 by (auto simp add: perm_nat_def)
  3064 
  3064 
  3065 lemma numeral_nat_eqvt: 
  3065 lemma numeral_nat_eqvt: 
  3066  shows "pi\<bullet> ((number_of n)::nat) = number_of ( n)" 
  3066  shows "pi\<bullet>((number_of n)::nat) = number_of n" 
  3067 by (simp add: perm_nat_def perm_int_def)
  3067 by (simp add: perm_nat_def perm_int_def)
  3068 
  3068 
  3069 lemma max_nat_eqvt:
  3069 lemma max_nat_eqvt:
  3070  shows "pi\<bullet>(max (x::nat) y) = max (pi\<bullet>x) (pi\<bullet>y)" 
  3070   fixes x::"nat"
       
  3071   shows "pi\<bullet>(max x y) = max (pi\<bullet>x) (pi\<bullet>y)" 
  3071 by (simp add:perm_nat_def) 
  3072 by (simp add:perm_nat_def) 
  3072 
  3073 
  3073 lemma min_nat_eqvt:
  3074 lemma min_nat_eqvt:
  3074  shows "pi\<bullet> max (x::nat) y = max (pi\<bullet>x) (pi\<bullet>y)" 
  3075   fixes x::"nat"
       
  3076   shows "pi\<bullet>(max x y) = max (pi\<bullet>x) (pi\<bullet>y)" 
  3075 by (simp add:perm_nat_def) 
  3077 by (simp add:perm_nat_def) 
  3076 
  3078 
  3077 lemma plus_nat_eqvt:
  3079 lemma plus_nat_eqvt:
  3078  shows "pi\<bullet>((x::nat) + y) = (pi\<bullet>x) + (pi\<bullet>y)" 
  3080   fixes x::"nat"
       
  3081   shows "pi\<bullet>(x + y) = (pi\<bullet>x) + (pi\<bullet>y)" 
  3079 by (simp add:perm_nat_def) 
  3082 by (simp add:perm_nat_def) 
  3080 
  3083 
  3081 lemma minus_nat_eqvt:
  3084 lemma minus_nat_eqvt:
  3082  shows "pi\<bullet>((x::nat) - y) = (pi\<bullet>x) - (pi\<bullet>y)" 
  3085   fixes x::"nat"
       
  3086   shows "pi\<bullet>(x - y) = (pi\<bullet>x) - (pi\<bullet>y)" 
  3083 by (simp add:perm_nat_def) 
  3087 by (simp add:perm_nat_def) 
  3084 
  3088 
  3085 lemma mult_nat_eqvt:
  3089 lemma mult_nat_eqvt:
  3086  shows "pi\<bullet>((x::nat) * y) = (pi\<bullet>x) * (pi\<bullet>y)" 
  3090   fixes x::"nat"
       
  3091   shows "pi\<bullet>(x * y) = (pi\<bullet>x) * (pi\<bullet>y)" 
  3087 by (simp add:perm_nat_def) 
  3092 by (simp add:perm_nat_def) 
  3088 
  3093 
  3089 lemma div_nat_eqvt:
  3094 lemma div_nat_eqvt:
  3090  shows "pi\<bullet>((x::nat) div y) = (pi\<bullet>x) div (pi\<bullet>y)" 
  3095   fixes x::"nat"
       
  3096   shows "pi\<bullet>(x div y) = (pi\<bullet>x) div (pi\<bullet>y)" 
  3091 by (simp add:perm_nat_def) 
  3097 by (simp add:perm_nat_def) 
  3092 
  3098 
  3093 (*******************************************************)
  3099 lemma Zero_int_eqvt:
  3094 (* Setup of the theorem attributes eqvt, fresh and bij *)
  3100   shows "pi\<bullet>(0::int) = 0" 
       
  3101 by (auto simp add: perm_int_def)
       
  3102 
       
  3103 lemma One_int_eqvt:
       
  3104   shows "pi\<bullet>(1::int) = 1"
       
  3105 by (simp add: perm_int_def)
       
  3106 
       
  3107 lemma numeral_int_eqvt: 
       
  3108  shows "pi\<bullet>((number_of n)::int) = number_of n" 
       
  3109 by (simp add: perm_int_def perm_int_def)
       
  3110 
       
  3111 lemma max_int_eqvt:
       
  3112   fixes x::"int"
       
  3113   shows "pi\<bullet>(max (x::int) y) = max (pi\<bullet>x) (pi\<bullet>y)" 
       
  3114 by (simp add:perm_int_def) 
       
  3115 
       
  3116 lemma min_int_eqvt:
       
  3117   fixes x::"int"
       
  3118   shows "pi\<bullet>(max x y) = max (pi\<bullet>x) (pi\<bullet>y)" 
       
  3119 by (simp add:perm_int_def) 
       
  3120 
       
  3121 lemma plus_int_eqvt:
       
  3122   fixes x::"int"
       
  3123   shows "pi\<bullet>(x + y) = (pi\<bullet>x) + (pi\<bullet>y)" 
       
  3124 by (simp add:perm_int_def) 
       
  3125 
       
  3126 lemma minus_int_eqvt:
       
  3127   fixes x::"int"
       
  3128   shows "pi\<bullet>(x - y) = (pi\<bullet>x) - (pi\<bullet>y)" 
       
  3129 by (simp add:perm_int_def) 
       
  3130 
       
  3131 lemma mult_int_eqvt:
       
  3132   fixes x::"int"
       
  3133   shows "pi\<bullet>(x * y) = (pi\<bullet>x) * (pi\<bullet>y)" 
       
  3134 by (simp add:perm_int_def) 
       
  3135 
       
  3136 lemma div_int_eqvt:
       
  3137   fixes x::"int"
       
  3138   shows "pi\<bullet>(x div y) = (pi\<bullet>x) div (pi\<bullet>y)" 
       
  3139 by (simp add:perm_int_def) 
       
  3140 
       
  3141 (*******************************************************************)
       
  3142 (* Setup of the theorem attributes eqvt, eqvt_force, fresh and bij *)
  3095 use "nominal_thmdecls.ML"
  3143 use "nominal_thmdecls.ML"
  3096 setup "NominalThmDecls.setup"
  3144 setup "NominalThmDecls.setup"
  3097 
  3145 
  3098 lemmas [eqvt] = 
  3146 lemmas [eqvt] = 
  3099   if_eqvt
  3147   (* connectives *)
       
  3148   if_eqvt imp_eqvt disj_eqvt conj_eqvt neg_eqvt
       
  3149   
       
  3150   (* datatypes *)
  3100   perm_unit.simps
  3151   perm_unit.simps
  3101   perm_list.simps 
  3152   perm_list.simps append_eqvt
  3102   perm_prod.simps 
  3153   perm_prod.simps
  3103   imp_eqvt disj_eqvt conj_eqvt neg_eqvt
  3154   fst_eqvt snd_eqvt
  3104   Suc_eqvt Zero_nat_eqvt One_nat_eqvt
  3155 
  3105   min_nat_eqvt max_nat_eqvt
  3156   (* nats *)
       
  3157   Suc_eqvt Zero_nat_eqvt One_nat_eqvt min_nat_eqvt max_nat_eqvt
  3106   plus_nat_eqvt minus_nat_eqvt mult_nat_eqvt div_nat_eqvt
  3158   plus_nat_eqvt minus_nat_eqvt mult_nat_eqvt div_nat_eqvt
       
  3159   
       
  3160   (* ints *)
       
  3161   Zero_int_eqvt One_int_eqvt min_int_eqvt max_int_eqvt
       
  3162   plus_int_eqvt minus_int_eqvt mult_int_eqvt div_int_eqvt
       
  3163   
       
  3164   (* sets *)
  3107   union_eqvt empty_eqvt insert_eqvt
  3165   union_eqvt empty_eqvt insert_eqvt
  3108   fst_eqvt snd_eqvt
  3166   
  3109  
  3167  
  3110 (* this lemma does not conform with the form of an eqvt-lemma but is *)
  3168 (* the lemmas numeral_nat_eqvt numeral_int_eqvt do not conform with the *)
  3111 (* still useful to have when analysing permutations on numbers       *)
  3169 (* usual form of an eqvt-lemma, but they are needed for analysing       *)
  3112 lemmas [eqvt_force] = numeral_nat_eqvt 
  3170 (* permutations on nats and ints *)
       
  3171 lemmas [eqvt_force] = numeral_nat_eqvt numeral_int_eqvt
  3113 
  3172 
  3114 (***************************************)
  3173 (***************************************)
  3115 (* setup for the individial atom-kinds *)
  3174 (* setup for the individial atom-kinds *)
  3116 (* and nominal datatypes               *)
  3175 (* and nominal datatypes               *)
  3117 use "nominal_atoms.ML"
  3176 use "nominal_atoms.ML"
  3179 use "nominal_induct.ML";
  3238 use "nominal_induct.ML";
  3180 method_setup nominal_induct =
  3239 method_setup nominal_induct =
  3181   {* NominalInduct.nominal_induct_method *}
  3240   {* NominalInduct.nominal_induct_method *}
  3182   {* nominal induction *}
  3241   {* nominal induction *}
  3183 
  3242 
  3184 
       
  3185 end
  3243 end