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" |