diff -r 9253984db291 -r 660a4f5adee8 Nominal/Ex/BetaCR.thy --- a/Nominal/Ex/BetaCR.thy Tue Dec 20 16:12:32 2011 +0900 +++ b/Nominal/Ex/BetaCR.thy Tue Dec 20 16:49:03 2011 +0900 @@ -52,31 +52,14 @@ equivariance beta -(* HERE 1 *) nominal_inductive beta avoids b3: x + | b4: x by (simp_all add: fresh_star_def fresh_Pair lam.fresh fresh_fact) -(* This also works, but we cannot have them together: *) -(*nominal_inductive beta - avoids b4: x - by (simp_all add: fresh_star_def fresh_Pair lam.fresh fresh_fact)*) -(* But I need a combination, possibly with an 'and' syntax: -nominal_inductive beta - avoids b3: x and b4: x - by (simp_all add: fresh_star_def fresh_Pair lam.fresh fresh_fact) -*) (* The combination should look like this: *) -lemma beta_strong_induct: - assumes "x1 \b x2" - and "\t1 t2 s c. \ t1 \b t2; \c. P c t1 t2\ \ P c (App t1 s) (App t2 s)" - and "\s1 s2 t c. \ s1 \b s2; \c. P c s1 s2\ \ P c (App t s1) (App t s2)" - and "\t1 t2 x c. \{atom x} \* c; t1 \b t2; \c. P c t1 t2\ \ P c (Lam [x]. t1) (Lam [x]. t2)" - and "\x s t c. \{atom x} \* c; atom x \ s\ \ P c (App (Lam [x]. t) s) (t [x ::= s])" - shows "P (c\'a\fs) x1 x2" - sorry inductive beta_star :: "lam \ lam \ bool" (" _ \b* _" [80,80] 80) @@ -201,10 +184,7 @@ lemma beta_subst2_pre: assumes "A \b B" shows "A [x ::= C] \b* B [x ::= C]" using assms -(* HERE 3: nominal_induct doesn't work - leaves the assumption *) -(* apply (nominal_induct avoiding: x C rule: beta_strong_induct)*) - apply - - apply (erule beta_strong_induct[of A B "\c A B. A [(fst c) ::= (snd c)] \b* B [(fst c) ::= (snd c)]" "(x, C)", simplified]) + apply (nominal_induct avoiding: x C rule: beta.strong_induct) apply (auto simp add: App_beta fresh_star_def fresh_Pair Lam_beta)[3] apply (subst substitution_lemma) apply (auto simp add: fresh_star_def fresh_Pair fresh_at_base)[2]