+ −
theory Swap = Main:+ −
+ −
consts + −
swapa :: "(string \<times> string) \<Rightarrow> string \<Rightarrow> string"+ −
swapas :: "(string \<times> string)list \<Rightarrow> string \<Rightarrow> string"+ −
primrec+ −
"swapa (b,c) a = (if b = a then c else (if c = a then b else a))"+ −
+ −
primrec+ −
"swapas [] a = a"+ −
"swapas (x#pi) a = swapa x (swapas pi a)"+ −
+ −
lemma [simp]: + −
"swapas [(a,a)] b=b"+ −
apply(auto)+ −
done+ −
+ −
lemma swapas_append: + −
"swapas (pi1@pi2) a = swapas pi1 (swapas pi2 a)"+ −
apply(induct_tac pi1, auto)+ −
done + −
+ −
lemma [simp]: + −
"swapas (rev pi) (swapas pi a) = a"+ −
apply(induct_tac pi)+ −
apply(simp_all add: swapas_append, auto)+ −
done+ −
+ −
lemma swapas_rev_pi_a: + −
"swapas pi a = b \<Longrightarrow> swapas (rev pi) b = a"+ −
apply(auto)+ −
done+ −
+ −
lemma [simp]: + −
"swapas pi (swapas (rev pi) a) = a"+ −
apply(rule swapas_rev_pi_a[of "(rev pi)" _ _,simplified])+ −
apply(simp)+ −
done+ −
+ −
lemma swapas_rev_pi_b: + −
"swapas (rev pi) a = b \<Longrightarrow> swapas pi b = a"+ −
apply(auto)+ −
done+ −
+ −
lemma swapas_comm: + −
"(swapas (pi@[(a,b)]) c) = (swapas ([(swapas pi a,swapas pi b)]@pi) c)"+ −
apply(auto)+ −
apply(simp_all only: swapas_append)+ −
apply(auto)+ −
apply(drule swapas_rev_pi_a, simp)+ −
apply(drule swapas_rev_pi_a, simp)+ −
done+ −
+ −
end+ −