Nominal/Nominal2_Abs.thy
changeset 3104 f7c4b8e6918b
parent 3060 6613514ff6cb
child 3152 da59c94bed7e
equal deleted inserted replaced
3103:9a63d90d1752 3104:f7c4b8e6918b
   363     using set_renaming_perm2 by blast
   363     using set_renaming_perm2 by blast
   364   from * have "\<forall>b \<in> supp x. p \<bullet> b = p' \<bullet> b" by blast
   364   from * have "\<forall>b \<in> supp x. p \<bullet> b = p' \<bullet> b" by blast
   365   then have a: "p \<bullet> x = p' \<bullet> x" using supp_perm_perm_eq by auto
   365   then have a: "p \<bullet> x = p' \<bullet> x" using supp_perm_perm_eq by auto
   366   from * have "\<forall>b \<in> as. p \<bullet> b = p' \<bullet> b" by blast
   366   from * have "\<forall>b \<in> as. p \<bullet> b = p' \<bullet> b" by blast
   367   then have zb: "p \<bullet> as = p' \<bullet> as" 
   367   then have zb: "p \<bullet> as = p' \<bullet> as" 
   368     apply(auto simp add: permute_set_eq)
   368     apply(auto simp add: permute_set_def)
   369     apply(rule_tac x="xa" in exI)
   369     apply(rule_tac x="xa" in exI)
   370     apply(simp)
   370     apply(simp)
   371     done
   371     done
   372   have zc: "p' \<bullet> as = as'" using asm by (simp add: alphas)
   372   have zc: "p' \<bullet> as = as'" using asm by (simp add: alphas)
   373   from 0 have 1: "(supp x - as) \<sharp>* p" using *
   373   from 0 have 1: "(supp x - as) \<sharp>* p" using *
   798     then have "Abs_set {a} x = Abs_set {b} y \<longleftrightarrow> (a = b \<and> x = y)" by (simp add: Abs1_eq)
   798     then have "Abs_set {a} x = Abs_set {b} y \<longleftrightarrow> (a = b \<and> x = y)" by (simp add: Abs1_eq)
   799   }
   799   }
   800   moreover
   800   moreover
   801   { assume *: "a \<noteq> b" and **: "Abs_set {a} x = Abs_set {b} y"
   801   { assume *: "a \<noteq> b" and **: "Abs_set {a} x = Abs_set {b} y"
   802     have #: "a \<sharp> Abs_set {b} y" by (simp add: **[symmetric] Abs_fresh_iff)
   802     have #: "a \<sharp> Abs_set {b} y" by (simp add: **[symmetric] Abs_fresh_iff)
   803     have "Abs_set {a} ((a \<rightleftharpoons> b) \<bullet> y) = (a \<rightleftharpoons> b) \<bullet> (Abs_set {b} y)" by (simp add: permute_set_eq assms)
   803     have "Abs_set {a} ((a \<rightleftharpoons> b) \<bullet> y) = (a \<rightleftharpoons> b) \<bullet> (Abs_set {b} y)" by (simp add: permute_set_def assms)
   804     also have "\<dots> = Abs_set {b} y"
   804     also have "\<dots> = Abs_set {b} y"
   805       by (rule swap_fresh_fresh) (simp add: #, simp add: Abs_fresh_iff)
   805       by (rule swap_fresh_fresh) (simp add: #, simp add: Abs_fresh_iff)
   806     also have "\<dots> = Abs_set {a} x" using ** by simp
   806     also have "\<dots> = Abs_set {a} x" using ** by simp
   807     finally have "a \<noteq> b \<and> x = (a \<rightleftharpoons> b) \<bullet> y \<and> a \<sharp> y" using # * by (simp add: Abs1_eq Abs_fresh_iff)
   807     finally have "a \<noteq> b \<and> x = (a \<rightleftharpoons> b) \<bullet> y \<and> a \<sharp> y" using # * by (simp add: Abs1_eq Abs_fresh_iff)
   808   }
   808   }
   809   moreover 
   809   moreover 
   810   { assume *: "a \<noteq> b" and **: "x = (a \<rightleftharpoons> b) \<bullet> y \<and> a \<sharp> y"
   810   { assume *: "a \<noteq> b" and **: "x = (a \<rightleftharpoons> b) \<bullet> y \<and> a \<sharp> y"
   811     have "Abs_set {a} x = Abs_set {a} ((a \<rightleftharpoons> b) \<bullet> y)" using ** by simp
   811     have "Abs_set {a} x = Abs_set {a} ((a \<rightleftharpoons> b) \<bullet> y)" using ** by simp
   812     also have "\<dots> = (a \<rightleftharpoons> b) \<bullet> Abs_set {b} y" by (simp add: permute_set_eq assms)
   812     also have "\<dots> = (a \<rightleftharpoons> b) \<bullet> Abs_set {b} y" by (simp add: permute_set_def assms)
   813     also have "\<dots> = Abs_set {b} y"
   813     also have "\<dots> = Abs_set {b} y"
   814       by (rule swap_fresh_fresh) (simp add: Abs_fresh_iff **, simp add: Abs_fresh_iff)
   814       by (rule swap_fresh_fresh) (simp add: Abs_fresh_iff **, simp add: Abs_fresh_iff)
   815     finally have "Abs_set {a} x = Abs_set {b} y" .
   815     finally have "Abs_set {a} x = Abs_set {b} y" .
   816   }
   816   }
   817   ultimately 
   817   ultimately 
   822     then have "Abs_res {a} x = Abs_res {b} y \<longleftrightarrow> (a = b \<and> x = y)" by (simp add: Abs1_eq)
   822     then have "Abs_res {a} x = Abs_res {b} y \<longleftrightarrow> (a = b \<and> x = y)" by (simp add: Abs1_eq)
   823   }
   823   }
   824   moreover
   824   moreover
   825   { assume *: "a \<noteq> b" and **: "Abs_res {a} x = Abs_res {b} y"
   825   { assume *: "a \<noteq> b" and **: "Abs_res {a} x = Abs_res {b} y"
   826     have #: "a \<sharp> Abs_res {b} y" by (simp add: **[symmetric] Abs_fresh_iff)
   826     have #: "a \<sharp> Abs_res {b} y" by (simp add: **[symmetric] Abs_fresh_iff)
   827     have "Abs_res {a} ((a \<rightleftharpoons> b) \<bullet> y) = (a \<rightleftharpoons> b) \<bullet> (Abs_res {b} y)" by (simp add: permute_set_eq assms)
   827     have "Abs_res {a} ((a \<rightleftharpoons> b) \<bullet> y) = (a \<rightleftharpoons> b) \<bullet> (Abs_res {b} y)" by (simp add: permute_set_def assms)
   828     also have "\<dots> = Abs_res {b} y"
   828     also have "\<dots> = Abs_res {b} y"
   829       by (rule swap_fresh_fresh) (simp add: #, simp add: Abs_fresh_iff)
   829       by (rule swap_fresh_fresh) (simp add: #, simp add: Abs_fresh_iff)
   830     also have "\<dots> = Abs_res {a} x" using ** by simp
   830     also have "\<dots> = Abs_res {a} x" using ** by simp
   831     finally have "a \<noteq> b \<and> x = (a \<rightleftharpoons> b) \<bullet> y \<and> a \<sharp> y" using # * by (simp add: Abs1_eq Abs_fresh_iff)
   831     finally have "a \<noteq> b \<and> x = (a \<rightleftharpoons> b) \<bullet> y \<and> a \<sharp> y" using # * by (simp add: Abs1_eq Abs_fresh_iff)
   832   }
   832   }
   833   moreover 
   833   moreover 
   834   { assume *: "a \<noteq> b" and **: "x = (a \<rightleftharpoons> b) \<bullet> y \<and> a \<sharp> y"
   834   { assume *: "a \<noteq> b" and **: "x = (a \<rightleftharpoons> b) \<bullet> y \<and> a \<sharp> y"
   835     have "Abs_res {a} x = Abs_res {a} ((a \<rightleftharpoons> b) \<bullet> y)" using ** by simp
   835     have "Abs_res {a} x = Abs_res {a} ((a \<rightleftharpoons> b) \<bullet> y)" using ** by simp
   836     also have "\<dots> = (a \<rightleftharpoons> b) \<bullet> Abs_res {b} y" by (simp add: permute_set_eq assms)
   836     also have "\<dots> = (a \<rightleftharpoons> b) \<bullet> Abs_res {b} y" by (simp add: permute_set_def assms)
   837     also have "\<dots> = Abs_res {b} y"
   837     also have "\<dots> = Abs_res {b} y"
   838       by (rule swap_fresh_fresh) (simp add: Abs_fresh_iff **, simp add: Abs_fresh_iff)
   838       by (rule swap_fresh_fresh) (simp add: Abs_fresh_iff **, simp add: Abs_fresh_iff)
   839     finally have "Abs_res {a} x = Abs_res {b} y" .
   839     finally have "Abs_res {a} x = Abs_res {b} y" .
   840   }
   840   }
   841   ultimately 
   841   ultimately