--- a/Quot/Examples/LamEx.thy Thu Jan 14 18:41:50 2010 +0100
+++ b/Quot/Examples/LamEx.thy Thu Jan 14 19:03:08 2010 +0100
@@ -241,6 +241,33 @@
"(Var a = Var b) = (a = b)"
by (lifting rvar_inject)
+
+lemma app_inject:
+ "(App t1 t2 = App s1 s2) = (t1 = s1 \<and> t2 = s2)"
+sorry
+
+lemma var_supp1:
+ shows "(supp (Var a)) = ((supp a)::name set)"
+apply(simp add: supp_def pi_var1 var_inject)
+done
+
+lemma var_supp:
+ shows "(supp (Var a)) = {a::name}"
+using var_supp1
+apply(simp add: supp_atm)
+done
+
+lemma app_supp:
+ shows "supp (App t1 t2) = (supp t1) \<union> ((supp t2)::name set)"
+apply(simp only: supp_def pi_app app_inject)
+apply(simp add: Collect_imp_eq Collect_neg_eq)
+done
+
+lemma lam_supp:
+ shows "supp (Lam x t) = ((supp ([x].t))::name set)"
+apply(simp add: supp_def pi_lam)
+sorry
+
lemma lam_induct:
"\<lbrakk>\<And>name. P (Var name);
\<And>lam1 lam2. \<lbrakk>P lam1; P lam2\<rbrakk> \<Longrightarrow> P (App lam1 lam2);
@@ -250,15 +277,33 @@
instance lam::pt_name
apply(default)
-sorry
+apply(induct_tac x rule: lam_induct)
+apply(simp add: pi_var1)
+apply(simp add: pi_app)
+apply(simp add: pi_lam)
+apply(induct_tac x rule: lam_induct)
+apply(simp add: pi_var1 pt_name2)
+apply(simp add: pi_app)
+apply(simp add: pi_lam pt_name2)
+apply(induct_tac x rule: lam_induct)
+apply(simp add: pi_var1 pt_name3)
+apply(simp add: pi_app)
+apply(simp add: pi_lam pt_name3)
+done
instance lam::fs_name
apply(default)
+apply(induct_tac x rule: lam_induct)
+apply(simp add: var_supp)
+apply(simp add: app_supp)
sorry
lemma fresh_lam:
"(a \<sharp> Lam b t) \<longleftrightarrow> (a = b) \<or> (a \<noteq> b \<and> a \<sharp> t)"
-sorry
+apply(simp add: fresh_def)
+apply(simp add: lam_supp abs_supp)
+apply(auto)
+done
lemma lam_induct_strong:
fixes a::"'a::fs_name"