diff -r 4ccb7e6be929 -r 51a80e238b29 src/HOL/Nominal/Examples/Compile.thy --- a/src/HOL/Nominal/Examples/Compile.thy Wed Feb 07 17:41:11 2007 +0100 +++ b/src/HOL/Nominal/Examples/Compile.thy Wed Feb 07 17:44:07 2007 +0100 @@ -45,62 +45,42 @@ text {* valid contexts *} -consts - ctxts :: "((name\'a::pt_name) list) set" - valid :: "(name\'a::pt_name) list \ bool" -translations - "valid \" \ "\ \ ctxts" - -inductive ctxts -intros -v1[intro]: "valid []" -v2[intro]: "\valid \;a\\\\ valid ((a,\)#\)" (* maybe dom of \ *) +inductive2 valid :: "(name\'a::pt_name) list \ bool" +where + v1[intro]: "valid []" +| v2[intro]: "\valid \;a\\\\ valid ((a,\)#\)" (* maybe dom of \ *) text {* typing judgements for trms *} -consts - typing :: "(((name\ty) list)\trm\ty) set" -syntax - "_typing_judge" :: "(name\ty) list\trm\ty\bool" (" _ \ _ : _ " [80,80,80] 80) -translations - "\ \ t : \" \ "(\,t,\) \ typing" - -inductive typing -intros -t0[intro]: "\valid \; (x,\)\set \\\ \ \ Var x : \" -t1[intro]: "\\ \ e1 : \1\\2; \ \ e2 : \1\\ \ \ App e1 e2 : \2" -t2[intro]: "\x\\;((x,\1)#\) \ t : \2\ \ \ \ Lam [x].t : \1\\2" -t3[intro]: "valid \ \ \ \ Const n : Data(DNat)" -t4[intro]: "\\ \ e1 : Data(\1); \ \ e2 : Data(\2)\ \ \ \ Pr e1 e2 : Data (DProd \1 \2)" -t5[intro]: "\\ \ e : Data(DProd \1 \2)\ \ \ \ Fst e : Data(\1)" -t6[intro]: "\\ \ e : Data(DProd \1 \2)\ \ \ \ Snd e : Data(\2)" -t7[intro]: "\\ \ e : Data(\1)\ \ \ \ InL e : Data(DSum \1 \2)" -t8[intro]: "\\ \ e : Data(\2)\ \ \ \ InR e : Data(DSum \1 \2)" -t9[intro]: "\x1\\; x2\\; \ \ e: Data(DSum \1 \2); +inductive2 typing :: "(name\ty) list\trm\ty\bool" (" _ \ _ : _ " [80,80,80] 80) +where + t0[intro]: "\valid \; (x,\)\set \\\ \ \ Var x : \" +| t1[intro]: "\\ \ e1 : \1\\2; \ \ e2 : \1\\ \ \ App e1 e2 : \2" +| t2[intro]: "\x\\;((x,\1)#\) \ t : \2\ \ \ \ Lam [x].t : \1\\2" +| t3[intro]: "valid \ \ \ \ Const n : Data(DNat)" +| t4[intro]: "\\ \ e1 : Data(\1); \ \ e2 : Data(\2)\ \ \ \ Pr e1 e2 : Data (DProd \1 \2)" +| t5[intro]: "\\ \ e : Data(DProd \1 \2)\ \ \ \ Fst e : Data(\1)" +| t6[intro]: "\\ \ e : Data(DProd \1 \2)\ \ \ \ Snd e : Data(\2)" +| t7[intro]: "\\ \ e : Data(\1)\ \ \ \ InL e : Data(DSum \1 \2)" +| t8[intro]: "\\ \ e : Data(\2)\ \ \ \ InR e : Data(DSum \1 \2)" +| t9[intro]: "\x1\\; x2\\; \ \ e: Data(DSum \1 \2); ((x1,Data(\1))#\) \ e1 : \; ((x2,Data(\2))#\) \ e2 : \\ \ \ \ (Case e of inl x1 \ e1 | inr x2 \ e2) : \" text {* typing judgements for Itrms *} -consts - Ityping :: "(((name\tyI) list)\trmI\tyI) set" -syntax - "_typing_judge" :: "(name\tyI) list\trmI\tyI\bool" (" _ I\ _ : _ " [80,80,80] 80) -translations - "\ I\ t : \" \ "(\,t,\) \ Ityping" - -inductive Ityping -intros -t0[intro]: "\valid \; (x,\)\set \\\ \ I\ IVar x : \" -t1[intro]: "\\ I\ e1 : \1\\2; \ I\ e2 : \1\\ \ I\ IApp e1 e2 : \2" -t2[intro]: "\x\\;((x,\1)#\) I\ t : \2\ \ \ I\ ILam [x].t : \1\\2" -t3[intro]: "valid \ \ \ I\ IUnit : DataI(OneI)" -t4[intro]: "valid \ \ \ I\ INat(n) : DataI(NatI)" -t5[intro]: "\ I\ e : DataI(NatI) \ \ I\ ISucc(e) : DataI(NatI)" -t6[intro]: "\\ I\ e : DataI(NatI)\ \ \ I\ IRef e : DataI (NatI)" -t7[intro]: "\\ I\ e1 : DataI(NatI); \ I\ e2 : DataI(NatI)\ \ \ I\ e1\e2 : DataI(OneI)" -t8[intro]: "\\ I\ e1 : DataI(NatI); \ I\ e2 : \\ \ \ I\ e1;;e2 : \" -t9[intro]: "\\ I\ e: DataI(NatI); \ I\ e1 : \; \ I\ e2 : \\ \ \ I\ Iif e e1 e2 : \" +inductive2 Ityping :: "(name\tyI) list\trmI\tyI\bool" (" _ I\ _ : _ " [80,80,80] 80) +where + t0[intro]: "\valid \; (x,\)\set \\\ \ I\ IVar x : \" +| t1[intro]: "\\ I\ e1 : \1\\2; \ I\ e2 : \1\\ \ I\ IApp e1 e2 : \2" +| t2[intro]: "\x\\;((x,\1)#\) I\ t : \2\ \ \ I\ ILam [x].t : \1\\2" +| t3[intro]: "valid \ \ \ I\ IUnit : DataI(OneI)" +| t4[intro]: "valid \ \ \ I\ INat(n) : DataI(NatI)" +| t5[intro]: "\ I\ e : DataI(NatI) \ \ I\ ISucc(e) : DataI(NatI)" +| t6[intro]: "\\ I\ e : DataI(NatI)\ \ \ I\ IRef e : DataI (NatI)" +| t7[intro]: "\\ I\ e1 : DataI(NatI); \ I\ e2 : DataI(NatI)\ \ \ I\ e1\e2 : DataI(OneI)" +| t8[intro]: "\\ I\ e1 : DataI(NatI); \ I\ e2 : \\ \ \ I\ e1;;e2 : \" +| t9[intro]: "\\ I\ e: DataI(NatI); \ I\ e1 : \; \ I\ e2 : \\ \ \ I\ Iif e e1 e2 : \" text {* capture-avoiding substitution *} @@ -257,46 +237,32 @@ text {* big-step evaluation for trms *} -consts - big :: "(trm\trm) set" -syntax - "_big_judge" :: "trm\trm\bool" ("_ \ _" [80,80] 80) -translations - "e1 \ e2" \ "(e1,e2) \ big" - -inductive big -intros -b0[intro]: "Lam [x].e \ Lam [x].e" -b1[intro]: "\e1\Lam [x].e; e2\e2'; e[x::=e2']\e'\ \ App e1 e2 \ e'" -b2[intro]: "Const n \ Const n" -b3[intro]: "\e1\e1'; e2\e2'\ \ Pr e1 e2 \ Pr e1' e2'" -b4[intro]: "e\Pr e1 e2 \ Fst e\e1" -b5[intro]: "e\Pr e1 e2 \ Snd e\e2" -b6[intro]: "e\e' \ InL e \ InL e'" -b7[intro]: "e\e' \ InR e \ InR e'" -b8[intro]: "\e\InL e'; e1[x::=e']\e''\ \ Case e of inl x1 \ e1 | inr x2 \ e2 \ e''" -b9[intro]: "\e\InR e'; e2[x::=e']\e''\ \ Case e of inl x1 \ e1 | inr x2 \ e2 \ e''" +inductive2 big :: "trm\trm\bool" ("_ \ _" [80,80] 80) +where + b0[intro]: "Lam [x].e \ Lam [x].e" +| b1[intro]: "\e1\Lam [x].e; e2\e2'; e[x::=e2']\e'\ \ App e1 e2 \ e'" +| b2[intro]: "Const n \ Const n" +| b3[intro]: "\e1\e1'; e2\e2'\ \ Pr e1 e2 \ Pr e1' e2'" +| b4[intro]: "e\Pr e1 e2 \ Fst e\e1" +| b5[intro]: "e\Pr e1 e2 \ Snd e\e2" +| b6[intro]: "e\e' \ InL e \ InL e'" +| b7[intro]: "e\e' \ InR e \ InR e'" +| b8[intro]: "\e\InL e'; e1[x::=e']\e''\ \ Case e of inl x1 \ e1 | inr x2 \ e2 \ e''" +| b9[intro]: "\e\InR e'; e2[x::=e']\e''\ \ Case e of inl x1 \ e1 | inr x2 \ e2 \ e''" -consts - Ibig :: "(((nat\nat)\trmI)\((nat\nat)\trmI)) set" -syntax - "_Ibig_judge" :: "((nat\nat)\trmI)\((nat\nat)\trmI)\bool" ("_ I\ _" [80,80] 80) -translations - "(m,e1) I\ (m',e2)" \ "((m,e1),(m',e2)) \ Ibig" - -inductive Ibig -intros -m0[intro]: "(m,ILam [x].e) I\ (m,ILam [x].e)" -m1[intro]: "\(m,e1)I\(m',ILam [x].e); (m',e2)I\(m'',e3); (m'',e[x::=e3])I\(m''',e4)\ +inductive2 Ibig :: "((nat\nat)\trmI)\((nat\nat)\trmI)\bool" ("_ I\ _" [80,80] 80) +where + m0[intro]: "(m,ILam [x].e) I\ (m,ILam [x].e)" +| m1[intro]: "\(m,e1)I\(m',ILam [x].e); (m',e2)I\(m'',e3); (m'',e[x::=e3])I\(m''',e4)\ \ (m,IApp e1 e2) I\ (m''',e4)" -m2[intro]: "(m,IUnit) I\ (m,IUnit)" -m3[intro]: "(m,INat(n))I\(m,INat(n))" -m4[intro]: "(m,e)I\(m',INat(n)) \ (m,ISucc(e))I\(m',INat(n+1))" -m5[intro]: "(m,e)I\(m',INat(n)) \ (m,IRef(e))I\(m',INat(m' n))" -m6[intro]: "\(m,e1)I\(m',INat(n1)); (m',e2)I\(m'',INat(n2))\ \ (m,e1\e2)I\(m''(n1:=n2),IUnit)" -m7[intro]: "\(m,e1)I\(m',IUnit); (m',e2)I\(m'',e)\ \ (m,e1;;e2)I\(m'',e)" -m8[intro]: "\(m,e)I\(m',INat(n)); n\0; (m',e1)I\(m'',e)\ \ (m,Iif e e1 e2)I\(m'',e)" -m9[intro]: "\(m,e)I\(m',INat(0)); (m',e2)I\(m'',e)\ \ (m,Iif e e1 e2)I\(m'',e)" +| m2[intro]: "(m,IUnit) I\ (m,IUnit)" +| m3[intro]: "(m,INat(n))I\(m,INat(n))" +| m4[intro]: "(m,e)I\(m',INat(n)) \ (m,ISucc(e))I\(m',INat(n+1))" +| m5[intro]: "(m,e)I\(m',INat(n)) \ (m,IRef(e))I\(m',INat(m' n))" +| m6[intro]: "\(m,e1)I\(m',INat(n1)); (m',e2)I\(m'',INat(n2))\ \ (m,e1\e2)I\(m''(n1:=n2),IUnit)" +| m7[intro]: "\(m,e1)I\(m',IUnit); (m',e2)I\(m'',e)\ \ (m,e1;;e2)I\(m'',e)" +| m8[intro]: "\(m,e)I\(m',INat(n)); n\0; (m',e1)I\(m'',e)\ \ (m,Iif e e1 e2)I\(m'',e)" +| m9[intro]: "\(m,e)I\(m',INat(0)); (m',e2)I\(m'',e)\ \ (m,Iif e e1 e2)I\(m'',e)" text {* Translation functions *}