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