diff -r b6873d123f9b -r 89715c48f728 Nominal/Ex/SFT/Theorem.thy --- a/Nominal/Ex/SFT/Theorem.thy Sat May 12 21:39:09 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,70 +0,0 @@ -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 (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 (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 . - 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 (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 - 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\) \ 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 - -lemmas [simp] = Ap Num -lemmas [simp del] = fresh_def Num_def - -theorem SFP: - fixes F :: lam - shows "\X. X \ F \ \X\" -proof - - obtain x :: name where [simp]:"atom x \ F" using obtain_fresh by blast - 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 \ 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 -qed - -end