diff -r 319964ecf1f6 -r 4d01d1056e22 Nominal/Ex/AuxNoFCB.thy --- a/Nominal/Ex/AuxNoFCB.thy Thu Mar 29 10:37:09 2012 +0200 +++ b/Nominal/Ex/AuxNoFCB.thy Thu Mar 29 10:37:41 2012 +0200 @@ -188,6 +188,30 @@ apply (simp add: Abs1_eq_iff fresh_Pair_elim fresh_at_base swap_commute) done +lemma aux_induct: "\\xs n m. P xs (Var n) (Var m); \xs n l r. P xs (Var n) (App l r); + \xs n x t. P xs (Var n) (Lam [x]. t); + \xs l r n. P xs (App l r) (Var n); + (\xs l1 r1 l2 r2. P xs l1 l2 \ P xs r1 r2 \ P xs (App l1 r1) (App l2 r2)); + \xs l r x t. P xs (App l r) (Lam [x]. t); + \xs x t n. P xs (Lam [x]. t) (Var n); + \xs x t l1 r1. P xs (Lam [x]. t) (App l1 r1); + \x xs y s t. + atom x \ (xs, Lam [y]. s) \ + atom y \ (x, xs, Lam [x]. t) \ P ((x, y) # xs) t s \ P xs (Lam [x]. t) (Lam [y]. s)\ +\ P (a :: (name \ name) list) b c" + apply (induction_schema) + apply (rule_tac y="b" and c="(a, c)" in lam.strong_exhaust) + apply (rule_tac y="c" and c="(name, a, b)" in lam.strong_exhaust) + apply simp_all[3] apply (metis) + apply (rule_tac y="c" and c="(name, a, b)" in lam.strong_exhaust) + apply simp_all[3] apply (metis, metis, metis) + apply (rule_tac y="c" and c="(name, a, b)" in lam.strong_exhaust) + apply simp_all[3] apply (metis) + apply (simp add: fresh_star_def) + apply metis + apply lexicographic_order + done + end