added an example about lambda-terms
authorChristian Urban <urbanc@in.tum.de>
Tue, 27 Oct 2009 11:43:02 +0100
changeset 201 1ac36993cc71
parent 200 d6a24dad5882
child 202 8ca1150f34d0
child 203 7384115df9fd
added an example about lambda-terms
LamEx.thy
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LamEx.thy	Tue Oct 27 11:43:02 2009 +0100
@@ -0,0 +1,31 @@
+theory LamEx
+imports Nominal QuotMain
+begin
+
+atom_decl name
+
+nominal_datatype rlam =
+  rVar "name"
+| rApp "rlam" "rlam"
+| rLam "name" "rlam"
+
+inductive 
+  alpha :: "rlam \<Rightarrow> rlam \<Rightarrow> bool" ("_ \<approx> _" [100, 100] 100)
+where
+  a1: "a = b \<Longrightarrow> (rVar a) \<approx> (rVar b)"
+| a2: "\<lbrakk>t1 \<approx> t2; s1 \<approx> s2\<rbrakk> \<Longrightarrow> rApp t1 s1 \<approx> rApp t2 s2"
+| a3: "\<lbrakk>t \<approx> ([(a,b)]\<bullet>s); a\<sharp>s\<rbrakk> \<Longrightarrow> rLam a t \<approx> rLam b s"
+
+quotient lam = rlam / alpha
+sorry
+
+local_setup {*
+  make_const_def @{binding Var} @{term "rVar"} NoSyn @{typ "rlam"} @{typ "lam"} #> snd #>
+  make_const_def @{binding App} @{term "rApp"} NoSyn @{typ "rlam"} @{typ "lam"} #> snd #>
+  make_const_def @{binding Lam} @{term "rLam"} NoSyn @{typ "rlam"} @{typ "lam"} #> snd
+*}
+
+lemma real_alpha:
+  assumes "t = ([(a,b)]\<bullet>s)" "a\<sharp>s"
+  shows "Lam a t = Lam b s"
+sorry
\ No newline at end of file