equal
deleted
inserted
replaced
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 *} |