src/HOL/Nominal/Nominal.thy
changeset 21405 26b51f724fe6
parent 21377 c29146dc14f1
child 21541 ea881fbe0489
equal deleted inserted replaced
21404:eb85850d3eb7 21405:26b51f724fe6
   344 
   344 
   345 lemma fresh_prod_elim: 
   345 lemma fresh_prod_elim: 
   346   shows "(a\<sharp>(x,y) \<Longrightarrow> PROP C) \<equiv> (a\<sharp>x \<Longrightarrow> a\<sharp>y \<Longrightarrow> PROP C)"
   346   shows "(a\<sharp>(x,y) \<Longrightarrow> PROP C) \<equiv> (a\<sharp>x \<Longrightarrow> a\<sharp>y \<Longrightarrow> PROP C)"
   347   by rule (simp_all add: fresh_prod)
   347   by rule (simp_all add: fresh_prod)
   348 
   348 
       
   349 (* this rule needs to be added before the fresh_prodD is *)
       
   350 (* added to the simplifier with mksimps                  *) 
       
   351 lemma [simp]:
       
   352   shows "a\<sharp>x1 \<Longrightarrow> a\<sharp>x2 \<Longrightarrow> a\<sharp>(x1,x2)"
       
   353   by (simp add: fresh_prod)
       
   354 
   349 lemma fresh_prodD:
   355 lemma fresh_prodD:
   350   shows "a\<sharp>(x,y) \<Longrightarrow> a\<sharp>x"
   356   shows "a\<sharp>(x,y) \<Longrightarrow> a\<sharp>x"
   351   and   "a\<sharp>(x,y) \<Longrightarrow> a\<sharp>y"
   357   and   "a\<sharp>(x,y) \<Longrightarrow> a\<sharp>y"
   352   by (simp_all add: fresh_prod)
   358   by (simp_all add: fresh_prod)
   353 
       
   354 (* setup for the simplifier to automatically unsplit freshness in products *)
       
   355 
   359 
   356 ML_setup {*
   360 ML_setup {*
   357   val mksimps_pairs = ("Nominal.fresh", thms "fresh_prodD")::mksimps_pairs;
   361   val mksimps_pairs = ("Nominal.fresh", thms "fresh_prodD")::mksimps_pairs;
   358   change_simpset (fn ss => ss setmksimps (mksimps mksimps_pairs));
   362   change_simpset (fn ss => ss setmksimps (mksimps mksimps_pairs));
   359 *}
   363 *}