theory Atoms = Main + Swap + Terms: consts atms :: "(string \ string) list \ string set" primrec "atms [] = {}" "atms (x#xs) = ((atms xs) \ {fst(x),snd(x)})" lemma [simp]: "atms (xs@ys) = atms xs \ atms ys" apply(induct_tac xs, auto) done lemma [simp]: "atms (rev pi) = atms pi" apply(induct_tac pi, simp_all) done lemma a_not_in_atms: "a\atms pi \ a = swapas pi a" apply(induct_tac pi, auto) done lemma swapas_pi_ineq_a: "swapas pi a \ a \ a\atms pi" apply(case_tac "a\atms pi") apply(simp)+ apply(drule a_not_in_atms[THEN mp]) apply(simp) done lemma a_ineq_swapas_pi: "a \ swapas pi a \ a\atms pi" apply(case_tac "a\atms pi") apply(simp_all add: a_not_in_atms) done lemma swapas_pi_in_atms[THEN mp]: "a\atms pi \ swapas pi a\atms pi" apply(subgoal_tac "\pi1. (a\atms pi1) \ swapas pi a\(atms pi1 \ atms pi)") apply(force) apply(induct_tac pi) apply(auto) done end