diff -r a9f3600c9ae6 -r 589b1a0c75e6 Nominal/Ex/SFT/Theorem.thy --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Nominal/Ex/SFT/Theorem.thy Fri Jun 24 10:30:06 2011 +0900 @@ -0,0 +1,70 @@ +header {* The main lemma about Num and the Second Fixed Point Theorem *} +theory Theorem imports Consts begin + +(*<*) +lemmas [simp] = b3[OF bI] b1 b4 b5 supp_Num[unfolded Num_def supp_ltgt] Num_def lam.fresh[unfolded fresh_def] fresh_def b6 +lemmas app = Ltgt1_app +(*>*) + +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\\". +next + case (Ap 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 . + 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 "... \ \\M \ N\\" using IH by simp + finally show "Num \ \M \ N\ \ \\M \ N\\". +next + case (Lm 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 + also have "... \ Abs \ (\ x. \P\) \ \[A1,A2,A3]\" using app . + also have "... \ \[A1,A2,A3]\ \ Umn 2 0 \ (\ x. \P\) \ \[A1,A2,A3]\" using Abs_app . + 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 "... = \\\ x. P\\" by simp + finally show "Num \ \\ x. P\ \ \\\ x. P\\" . +qed + +lemmas [simp] = Ap Num +lemmas [simp del] = fresh_def Num_def + +theorem SFP: + fixes F :: lam + 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 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 "... \ F \ \W \ \W\\" by simp + also have "... = F \ \X\" unfolding X_def .. + finally show ?thesis by blast +qed +(*>*)