Unification/Atoms.thy
changeset 107 5c816239deaa
equal deleted inserted replaced
106:ed54ec416bb3 107:5c816239deaa
       
     1 
       
     2 theory Atoms = Main + Swap + Terms:
       
     3 
       
     4 consts atms   :: "(string \<times> string) list \<Rightarrow> string set"
       
     5 primrec
       
     6 "atms [] = {}"
       
     7 "atms (x#xs) = ((atms xs) \<union>  {fst(x),snd(x)})"
       
     8 
       
     9 lemma [simp]: 
       
    10   "atms (xs@ys) = atms xs \<union> atms ys"
       
    11 apply(induct_tac xs, auto)
       
    12 done
       
    13 
       
    14 lemma [simp]: 
       
    15   "atms (rev pi) = atms pi"
       
    16 apply(induct_tac pi, simp_all)
       
    17 done
       
    18 
       
    19 lemma a_not_in_atms: 
       
    20   "a\<notin>atms pi \<longrightarrow> a = swapas pi a" 
       
    21 apply(induct_tac pi, auto)
       
    22 done
       
    23 
       
    24 lemma swapas_pi_ineq_a: 
       
    25   "swapas pi a \<noteq> a \<longrightarrow> a\<in>atms pi"
       
    26 apply(case_tac "a\<in>atms pi")
       
    27 apply(simp)+
       
    28 apply(drule a_not_in_atms[THEN mp])
       
    29 apply(simp)
       
    30 done
       
    31 
       
    32 lemma a_ineq_swapas_pi: 
       
    33   "a \<noteq> swapas pi a \<longrightarrow> a\<in>atms pi"
       
    34 apply(case_tac "a\<in>atms pi")
       
    35 apply(simp_all add: a_not_in_atms)
       
    36 done
       
    37 
       
    38 lemma swapas_pi_in_atms[THEN mp]: 
       
    39   "a\<in>atms pi \<longrightarrow> swapas pi a\<in>atms pi"
       
    40 apply(subgoal_tac "\<forall>pi1. (a\<in>atms pi1) \<longrightarrow> swapas pi a\<in>(atms pi1 \<union> atms pi)")
       
    41 apply(force)
       
    42 apply(induct_tac pi)
       
    43 apply(auto)
       
    44 done
       
    45 
       
    46 end