
diff -r d867021d8ac1 -r 3effd5446226 Nominal/Test.thy
--- a/Nominal/Test.thy	Thu Feb 25 15:40:09 2010 +0100
+++ b/Nominal/Test.thy	Thu Feb 25 15:41:23 2010 +0100
@@ -27,7 +27,7 @@
 nominal_datatype trm' =
   Var "name"
 | App "trm'" "trm'"
-| Lam x::"name" t::"trm'"        bind x in t 
+| Lam x::"name" t::"trm'"          bind x in t 
 | Let p::"pat'" "trm'" t::"trm'"   bind "f p" in t
 and pat' =
   PN
@@ -195,6 +195,58 @@
   "bv9 (Var9 x) = {}"
 | "bv9 (Lam9 x b) = {atom x}"
 
+(* example form Leroy 96 about modules *)
+
+nominal_datatype mexp =
+  Acc path
+| Stru body
+| Funct x::name sexp m::mexp    bind x in m
+| FApp mexp path
+| Ascr mexp sexp
+and body =
+  Empty
+| Seq c::defn d::body bind "cbinders c" in d
+and defn =  
+  Type name tyty
+| Dty name
+| DStru name mexp
+| Val name trmtrm
+and sexp =
+  Sig sbody
+| SFunc name sexp sexp
+and sbody = 
+  SEmpty
+| SSeq C::spec D::sbody  bind "Cbinders C" in D
+and spec =
+  Type1 name 
+| Type2 name tyty
+| SStru name sexp
+| SVal name tyty
+and tyty =
+  Tyref1 name
+| Tyref2 path tyty
+| Fun tyty tyty
+and path =
+  Sref1 name
+| Sref2 path name
+and trmtrm =
+  Tref1 name
+| Tref2 path name
+| Lam v::name tyty M::trmtrm  bind v in M
+| App trmtrm trmtrm
+| Let body trmtrm
+binder
+    cbinders :: "defn \<Rightarrow> atom set"
+and Cbinders :: "spec \<Rightarrow> atom set"
+where
+  "cbinders (Type t T) = {atom t}"
+| "cbinders (Dty t) = {atom t}"
+| "cbinders (DStru x s) = {atom x}"
+| "cbinders (Val v M) = {atom v}"
+| "Cbinders (Type1 t) = {atom t}"
+| "Cbinders (Type2 t T) = {atom t}"
+| "Cbinders (SStru x S) = {atom x}"
+| "Cbinders (SVal v T) = {atom v}"  
 
 (* core haskell *)
 




