230 lemma map_eqvt[eqvt]: |
230 lemma map_eqvt[eqvt]: |
231 shows "p \<bullet> (map f xs) = map (p \<bullet> f) (p \<bullet> xs)" |
231 shows "p \<bullet> (map f xs) = map (p \<bullet> f) (p \<bullet> xs)" |
232 by (induct xs) (simp_all, simp only: permute_fun_app_eq) |
232 by (induct xs) (simp_all, simp only: permute_fun_app_eq) |
233 |
233 |
234 |
234 |
235 subsection {* Equivariance for fsets *} |
235 subsection {* Equivariance Finite-Set Operations *} |
|
236 |
|
237 lemma in_fset_eqvt[eqvt]: |
|
238 shows "(p \<bullet> (x |\<in>| S)) = ((p \<bullet> x) |\<in>| (p \<bullet> S))" |
|
239 unfolding in_fset |
|
240 by (perm_simp) (simp) |
|
241 |
|
242 lemma union_fset_eqvt[eqvt]: |
|
243 shows "(p \<bullet> (S |\<union>| T)) = ((p \<bullet> S) |\<union>| (p \<bullet> T))" |
|
244 by (induct S) (simp_all) |
|
245 |
|
246 lemma supp_union_fset: |
|
247 fixes S T::"'a::fs fset" |
|
248 shows "supp (S |\<union>| T) = supp S \<union> supp T" |
|
249 by (induct S) (auto) |
|
250 |
|
251 lemma fresh_union_fset: |
|
252 fixes S T::"'a::fs fset" |
|
253 shows "a \<sharp> S |\<union>| T \<longleftrightarrow> a \<sharp> S \<and> a \<sharp> T" |
|
254 unfolding fresh_def |
|
255 by (simp add: supp_union_fset) |
236 |
256 |
237 lemma map_fset_eqvt[eqvt]: |
257 lemma map_fset_eqvt[eqvt]: |
238 shows "p \<bullet> (map_fset f S) = map_fset (p \<bullet> f) (p \<bullet> S)" |
258 shows "p \<bullet> (map_fset f S) = map_fset (p \<bullet> f) (p \<bullet> S)" |
239 by (lifting map_eqvt) |
259 by (lifting map_eqvt) |
240 |
260 |