diff -r 3750c08f627e -r c95afd0dc594 Nominal/Ex/SFT/Theorem.thy --- a/Nominal/Ex/SFT/Theorem.thy Wed Dec 21 14:25:05 2011 +0900 +++ b/Nominal/Ex/SFT/Theorem.thy Wed Dec 21 15:43:58 2011 +0900 @@ -8,31 +8,31 @@ lemma Num: shows "Num \ \M\ \ \\M\\" proof (induct M rule: lam.induct) - case (V n) - have "Num \ \V n\ = Num \ (Var \ V n)" by simp - also have "... = \[\[A1,A2,A3]\]\ \ (Var \ V n)" by simp - also have "... \ Var \ V n \ \[A1,A2,A3]\" using app . - also have "... \ \[A1,A2,A3]\ \ Umn 2 2 \ V n \ \[A1,A2,A3]\" using Var_app . - also have "... \ A1 \ V n \ \[A1,A2,A3]\" using U_app by simp - also have "... \ F1 \ V n" using A_app(1) . - also have "... \ App \ \Var\ \ (Var \ V n)" using F_app(1) . - also have "... = \\V n\\" by simp - finally show "Num \ \V n\ \ \\V n\\". + case (Var n) + have "Num \ \Var n\ = Num \ (VAR \ Var n)" by simp + also have "... = \[\[A1,A2,A3]\]\ \ (VAR \ Var n)" by simp + also have "... \ VAR \ Var n \ \[A1,A2,A3]\" using app . + also have "... \ \[A1,A2,A3]\ \ Umn 2 2 \ Var n \ \[A1,A2,A3]\" using VAR_app . + also have "... \ A1 \ Var n \ \[A1,A2,A3]\" using U_app by simp + also have "... \ F1 \ Var n" using A_app(1) . + also have "... \ APP \ \VAR\ \ (VAR \ Var n)" using F_app(1) . + also have "... = \\Var n\\" by simp + finally show "Num \ \Var n\ \ \\Var n\\". next - case (Ap M N) + case (App M N) assume IH: "Num \ \M\ \ \\M\\" "Num \ \N\ \ \\N\\" - have "Num \ \M \ N\ = Num \ (App \ \M\ \ \N\)" by simp - also have "... = \[\[A1,A2,A3]\]\ \ (App \ \M\ \ \N\)" by simp - also have "... \ App \ \M\ \ \N\ \ \[A1,A2,A3]\" using app . - also have "... \ \[A1,A2,A3]\ \ Umn 2 1 \ \M\ \ \N\ \ \[A1,A2,A3]\" using App_app . + have "Num \ \M \ N\ = Num \ (APP \ \M\ \ \N\)" by simp + also have "... = \[\[A1,A2,A3]\]\ \ (APP \ \M\ \ \N\)" by simp + also have "... \ APP \ \M\ \ \N\ \ \[A1,A2,A3]\" using app . + also have "... \ \[A1,A2,A3]\ \ Umn 2 1 \ \M\ \ \N\ \ \[A1,A2,A3]\" using APP_app . also have "... \ A2 \ \M\ \ \N\ \ \[A1,A2,A3]\" using U_app by simp also have "... \ F2 \ \M\ \ \N\ \ Num" using A_app(2) by simp - also have "... \ App \ (App \ \App\ \ (Num \ \M\)) \ (Num \ \N\)" using F_app(2) . - also have "... \ App \ (App \ \App\ \ (\\M\\)) \ (Num \ \N\)" using IH by simp + also have "... \ APP \ (APP \ \APP\ \ (Num \ \M\)) \ (Num \ \N\)" using F_app(2) . + also have "... \ APP \ (APP \ \APP\ \ (\\M\\)) \ (Num \ \N\)" using IH by simp also have "... \ \\M \ N\\" using IH by simp finally show "Num \ \M \ N\ \ \\M \ N\\". next - case (Lm x P) + case (Lam x P) assume IH: "Num \ \P\ \ \\P\\" have "Num \ \\ x. P\ = Num \ (Abs \ \ x. \P\)" by simp also have "... = \[\[A1,A2,A3]\]\ \ (Abs \ \ x. \P\)" by simp @@ -41,9 +41,9 @@ also have "... \ A3 \ (\ x. \P\) \ \[A1,A2,A3]\" using U_app by simp also have "... \ F3 \ (\ x. \P\) \ \[\[A1,A2,A3]\]\" using A_app(3) . also have "... = F3 \ (\ x. \P\) \ Num" by simp - also have "... \ App \ \Abs\ \ (Abs \ \ x. (Num \ ((\ x. \P\) \ V x)))" by (rule F3_app) simp_all - also have "... \ App \ \Abs\ \ (Abs \ \ x. (Num \ \P\))" using beta_app by simp - also have "... \ App \ \Abs\ \ (Abs \ \ x. \\P\\)" using IH by simp + also have "... \ APP \ \Abs\ \ (Abs \ \ x. (Num \ ((\ x. \P\) \ Var x)))" by (rule F3_app) simp_all + also have "... \ APP \ \Abs\ \ (Abs \ \ x. (Num \ \P\))" using beta_app by simp + also have "... \ APP \ \Abs\ \ (Abs \ \ x. \\P\\)" using IH by simp also have "... = \\\ x. P\\" by simp finally show "Num \ \\ x. P\ \ \\\ x. P\\" . qed @@ -56,12 +56,12 @@ shows "\X. X \ F \ \X\" proof - obtain x :: var where [simp]:"atom x \ F" using obtain_fresh by blast - def W \ "\x. (F \ (App \ V x \ (Num \ V x)))" + def W \ "\x. (F \ (APP \ Var x \ (Num \ Var x)))" def X \ "W \ \W\" have a: "X = W \ \W\" unfolding X_def .. - also have "... = (\x. (F \ (App \ V x \ (Num \ V x)))) \ \W\" unfolding W_def .. - also have "... \ F \ (App \ \W\ \ (Num \ \W\))" by simp - also have "... \ F \ (App \ \W\ \ \\W\\)" by simp + also have "... = (\x. (F \ (APP \ Var x \ (Num \ Var x)))) \ \W\" unfolding W_def .. + also have "... \ F \ (APP \ \W\ \ (Num \ \W\))" by simp + also have "... \ F \ (APP \ \W\ \ \\W\\)" by simp also have "... \ F \ \W \ \W\\" by simp also have "... = F \ \X\" unfolding X_def .. finally show ?thesis by blast