diff -r 2064f0fd20c9 -r f1db55c7534d src/HOL/Nominal/Examples/Compile.thy --- a/src/HOL/Nominal/Examples/Compile.thy Mon Apr 30 22:43:33 2007 +0200 +++ b/src/HOL/Nominal/Examples/Compile.thy Wed May 02 01:42:23 2007 +0200 @@ -1,6 +1,6 @@ (* $Id$ *) -(* A challenge suggested by Adam Chlipala *) +(* The definitions for a challenge suggested by Adam Chlipala *) theory Compile imports "../Nominal" @@ -8,51 +8,58 @@ atom_decl name -nominal_datatype data = DNat - | DProd "data" "data" - | DSum "data" "data" +nominal_datatype data = + DNat + | DProd "data" "data" + | DSum "data" "data" -nominal_datatype ty = Data "data" - | Arrow "ty" "ty" ("_\_" [100,100] 100) +nominal_datatype ty = + Data "data" + | Arrow "ty" "ty" ("_\_" [100,100] 100) -nominal_datatype trm = Var "name" - | Lam "\name\trm" ("Lam [_]._" [100,100] 100) - | App "trm" "trm" - | Const "nat" - | Pr "trm" "trm" - | Fst "trm" - | Snd "trm" - | InL "trm" - | InR "trm" - | Case "trm" "\name\trm" "\name\trm" - ("Case _ of inl _ \ _ | inr _ \ _" [100,100,100,100,100] 100) +nominal_datatype trm = + Var "name" + | Lam "\name\trm" ("Lam [_]._" [100,100] 100) + | App "trm" "trm" + | Const "nat" + | Pr "trm" "trm" + | Fst "trm" + | Snd "trm" + | InL "trm" + | InR "trm" + | Case "trm" "\name\trm" "\name\trm" + ("Case _ of inl _ \ _ | inr _ \ _" [100,100,100,100,100] 100) nominal_datatype dataI = OneI | NatI -nominal_datatype tyI = DataI "dataI" - | ArrowI "tyI" "tyI" ("_\_" [100,100] 100) +nominal_datatype tyI = + DataI "dataI" + | ArrowI "tyI" "tyI" ("_\_" [100,100] 100) -nominal_datatype trmI = IVar "name" - | ILam "\name\trmI" ("ILam [_]._" [100,100] 100) - | IApp "trmI" "trmI" - | IUnit - | INat "nat" - | ISucc "trmI" - | IAss "trmI" "trmI" ("_\_" [100,100] 100) - | IRef "trmI" - | ISeq "trmI" "trmI" ("_;;_" [100,100] 100) - | Iif "trmI" "trmI" "trmI" +nominal_datatype trmI = + IVar "name" + | ILam "\name\trmI" ("ILam [_]._" [100,100] 100) + | IApp "trmI" "trmI" + | IUnit + | INat "nat" + | ISucc "trmI" + | IAss "trmI" "trmI" ("_\_" [100,100] 100) + | IRef "trmI" + | ISeq "trmI" "trmI" ("_;;_" [100,100] 100) + | Iif "trmI" "trmI" "trmI" text {* valid contexts *} -inductive2 valid :: "(name\'a::pt_name) list \ bool" +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 *} -inductive2 typing :: "(name\ty) list\trm\ty\bool" (" _ \ _ : _ " [80,80,80] 80) +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" @@ -69,7 +76,8 @@ text {* typing judgements for Itrms *} -inductive2 Ityping :: "(name\tyI) list\trmI\tyI\bool" (" _ I\ _ : _ " [80,80,80] 80) +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" @@ -159,7 +167,8 @@ text {* big-step evaluation for trms *} -inductive2 big :: "trm\trm\bool" ("_ \ _" [80,80] 80) +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'" @@ -172,7 +181,8 @@ | 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 Ibig :: "((nat\nat)\trmI)\((nat\nat)\trmI)\bool" ("_ I\ _" [80,80] 80) +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)\