Nominal/Ex/CoreHaskell2.thy
changeset 2617 e44551d067e6
child 2950 0911cb7bf696
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Nominal/Ex/CoreHaskell2.thy	Wed Dec 22 09:13:25 2010 +0000
@@ -0,0 +1,79 @@
+theory CoreHaskell2
+imports "../Nominal2"
+begin
+
+(* Core Haskell by John Matthews *)
+
+atom_decl var
+atom_decl cvar
+atom_decl tvar
+
+
+nominal_datatype kinds:
+    Kind =
+       Klifted
+     | Kunlifted
+     | Kopen
+     | Karrow Kind Kind
+     | Keq Ty Ty
+and Ty =
+       Tvar tvar
+     | Tcon string
+     | Tapp Ty Ty
+     | Tforall pb::PBind ty::Ty   bind "bind_pb pb" in ty
+and PBind =
+  Pbind tvar Kind
+binder
+  bind_pb
+where
+  "bind_pb (Pbind tv k) = [atom tv]"
+
+nominal_datatype expressions:
+    Bind =
+       Vb var Ty
+     | Tb tvar Kind
+and Exp =
+       Var var
+     | Dcon string
+     | App Exp Exp
+     | Appt Exp Ty
+     | Lam b::Bind e::Exp bind "bind_b b" in e
+binder
+  bind_b
+where
+  "bind_b (Vb v ty) = [atom v]"
+| "bind_b (Tb tv kind) = [atom tv]"
+
+thm kinds.distinct
+thm kinds.induct
+thm kinds.inducts
+thm kinds.exhaust
+thm kinds.strong_exhaust
+thm kinds.fv_defs
+thm kinds.bn_defs
+thm kinds.perm_simps
+thm kinds.eq_iff
+thm kinds.fv_bn_eqvt
+thm kinds.size_eqvt
+thm kinds.supports
+thm kinds.fsupp
+thm kinds.supp
+thm kinds.fresh
+
+thm expressions.distinct
+thm expressions.induct
+thm expressions.inducts
+thm expressions.exhaust
+thm expressions.fv_defs
+thm expressions.bn_defs
+thm expressions.perm_simps
+thm expressions.eq_iff
+thm expressions.fv_bn_eqvt
+thm expressions.size_eqvt
+thm expressions.supports
+thm expressions.fsupp
+thm expressions.supp
+thm expressions.fresh
+
+end
+