Nominal/Abs.thy
changeset 1928 77eccce38a17
parent 1924 748084501637
child 1932 2b0cc308fd6a
equal deleted inserted replaced
1927:6c5e3ac737d9 1928:77eccce38a17
   394   unfolding fresh_def
   394   unfolding fresh_def
   395   unfolding supp_abs
   395   unfolding supp_abs
   396   by auto
   396   by auto
   397 
   397 
   398 section {* BELOW is stuff that may or may not be needed *}
   398 section {* BELOW is stuff that may or may not be needed *}
   399 
       
   400 lemma 
       
   401   fixes t1 s1::"'a::fs"
       
   402   and   t2 s2::"'b::fs"
       
   403   shows "Abs as (t1, t2) = Abs as (s1, s2) \<longrightarrow> (Abs as t1 = Abs as s1 \<and>  Abs as t2 = Abs as s2)"
       
   404 apply(subst abs_eq_iff)
       
   405 apply(subst alphas_abs)
       
   406 apply(subst alphas)
       
   407 apply(rule impI)
       
   408 apply(erule exE)
       
   409 apply(simp add: supp_Pair)
       
   410 apply(simp add: Un_Diff)
       
   411 apply(simp add: fresh_star_union)
       
   412 apply(erule conjE)+
       
   413 apply(rule conjI)
       
   414 apply(rule trans)
       
   415 apply(rule sym)
       
   416 apply(rule_tac p="p" in supp_perm_eq)
       
   417 apply(simp add: supp_abs)
       
   418 apply(simp)
       
   419 apply(rule trans)
       
   420 apply(rule sym)
       
   421 apply(rule_tac p="p" in supp_perm_eq)
       
   422 apply(simp add: supp_abs)
       
   423 apply(simp)
       
   424 done
       
   425 
       
   426 lemma 
       
   427   fixes t1 s1::"'a::fs"
       
   428   and   t2 s2::"'b::fs"
       
   429   shows "Abs as (t1, t2) = Abs bs (s1, s2) \<longrightarrow> (Abs as t1 = Abs bs s1 \<and>  Abs as t2 = Abs bs s2)"
       
   430 apply(subst abs_eq_iff)
       
   431 apply(subst alphas_abs)
       
   432 apply(subst alphas)
       
   433 apply(rule impI)
       
   434 apply(erule exE)
       
   435 apply(simp add: supp_Pair)
       
   436 apply(simp add: Un_Diff)
       
   437 apply(simp add: fresh_star_union)
       
   438 apply(erule conjE)+
       
   439 apply(rule conjI)
       
   440 apply(rule trans)
       
   441 apply(rule sym)
       
   442 apply(rule_tac p="p" in supp_perm_eq)
       
   443 apply(simp add: supp_abs)
       
   444 apply(simp)
       
   445 apply(rule trans)
       
   446 apply(rule sym)
       
   447 apply(rule_tac p="p" in supp_perm_eq)
       
   448 apply(simp add: supp_abs)
       
   449 apply(simp)
       
   450 done
       
   451 
       
   452 lemma fresh_star_eq:
       
   453   assumes a: "as \<sharp>* p"
       
   454   shows "\<forall>a \<in> as. p \<bullet> a = a"
       
   455 using a by (simp add: fresh_star_def fresh_def supp_perm)
       
   456 
       
   457 lemma fresh_star_set_eq:
       
   458   assumes a: "as \<sharp>* p"
       
   459   shows "p \<bullet> as = as"
       
   460 using a 
       
   461 apply(simp add: fresh_star_def fresh_def supp_perm permute_set_eq)
       
   462 apply(auto)
       
   463 by (metis permute_atom_def)
       
   464 
       
   465 lemma 
       
   466   fixes t1 s1::"'a::fs"
       
   467   and   t2 s2::"'b::fs"
       
   468   shows "Abs as t1 = Abs bs s1 \<longrightarrow> Abs (as \<union> cs) t1 = Abs (bs \<union> cs) s1"
       
   469 apply(subst abs_eq_iff)
       
   470 apply(subst abs_eq_iff)
       
   471 apply(subst alphas_abs)
       
   472 apply(subst alphas_abs)
       
   473 apply(subst alphas)
       
   474 apply(subst alphas)
       
   475 apply(rule impI)
       
   476 apply(erule exE | erule conjE)+
       
   477 apply(rule_tac x="p" in exI)
       
   478 apply(simp)
       
   479 apply(rule conjI)
       
   480 apply(auto)[1]
       
   481 apply(rule conjI)
       
   482 apply(auto)[1]
       
   483 apply(simp add: fresh_star_def)
       
   484 apply(auto)[1]
       
   485 apply(simp add: union_eqvt)
       
   486 oops
       
   487 
       
   488 
       
   489 lemma 
       
   490   fixes t1 s1::"'a::fs"
       
   491   and   t2 s2::"'b::fs"
       
   492   shows "(Abs as t1 = Abs bs s1 \<and>  Abs as t2 = Abs bs s2) \<longrightarrow> Abs as (t1, t2) = Abs bs (s1, s2)"
       
   493 apply(subst abs_eq_iff)
       
   494 apply(subst abs_eq_iff)
       
   495 apply(subst alphas_abs)
       
   496 apply(subst alphas_abs)
       
   497 apply(subst alphas)
       
   498 apply(subst alphas)
       
   499 apply(rule impI)
       
   500 apply(erule exE | erule conjE)+
       
   501 apply(simp add: abs_eq_iff)
       
   502 apply(simp add: alphas_abs)
       
   503 apply(simp add: alphas)
       
   504 apply(rule conjI)
       
   505 apply(simp add: supp_Pair Un_Diff)
       
   506 oops
       
   507 
       
   508 
       
   509 
       
   510 (* support of concrete atom sets *)
       
   511 
       
   512 lemma
       
   513   shows "Abs as t = Abs (supp t \<inter> as) t"
       
   514 apply(simp add: abs_eq_iff)
       
   515 apply(simp add: alphas_abs)
       
   516 apply(rule_tac x="0" in exI)
       
   517 apply(simp add: alphas)
       
   518 apply(auto)
       
   519 oops
       
   520 
       
   521 lemma
       
   522   assumes "finite S"
       
   523   shows "\<exists>q. supp q \<subseteq> S \<union> p \<bullet> S \<and> (\<forall>a \<in> S. q \<bullet> a = p \<bullet> a)"
       
   524 using assms
       
   525 apply(induct)
       
   526 apply(rule_tac x="0" in exI)
       
   527 apply(simp add: supp_zero_perm)
       
   528 apply(auto)
       
   529 apply(simp add: insert_eqvt)
       
   530 apply(rule_tac x="((p \<bullet> x) \<rightleftharpoons> x) + q" in exI)
       
   531 apply(rule conjI)
       
   532 apply(rule subset_trans)
       
   533 apply(rule supp_plus_perm)
       
   534 apply(simp add: supp_swap)
       
   535 apply(auto)[1]
       
   536 apply(simp)
       
   537 apply(rule conjI)
       
   538 apply(case_tac "q \<bullet> x = x")
       
   539 apply(simp)
       
   540 apply(simp add: supp_perm)
       
   541 apply(case_tac "x \<in> p \<bullet> F")
       
   542 sorry
       
   543 
   399 
   544 
   400 
   545 lemma supp_atom_image:
   401 lemma supp_atom_image:
   546   fixes as::"'a::at_base set"
   402   fixes as::"'a::at_base set"
   547   shows "supp (atom ` as) = supp as"
   403   shows "supp (atom ` as) = supp as"