diff -r 2f47291b6ff9 -r 9ffee4eb1ae1 Nominal/Ex/NoneExamples.thy --- a/Nominal/Ex/NoneExamples.thy Sun Aug 29 12:17:25 2010 +0800 +++ b/Nominal/Ex/NoneExamples.thy Sun Aug 29 13:36:03 2010 +0800 @@ -1,85 +1,80 @@ theory NoneExamples -imports "../NewParser" +imports "../Nominal2" begin +text {* + This example is not covered by our binding + specification. +*} + atom_decl name - text {* "Weirdo" example from Peter Sewell's bestiary. - This example is not covered by our binding - specification. - + p2 occurs in two bodies *} +(* nominal_datatype weird = Foo_var "name" | Foo_pair "weird" "weird" | Foo x::"name" y::"name" p1::"weird" p2::"weird" p3::"weird" bind x in p1 p2, bind y in p2 p3 - -(* e1 occurs in two bodies *) +*) -nominal_datatype exp = - Var name -| Pair exp exp -| LetRec x::name p::pat e1::exp e2::exp bind x in e1 e2, bind "bp p" in e1 -and pat = - PVar name -| PUnit -| PPair pat pat -binder - bp :: "pat \ atom list" -where - "bp (PVar x) = [atom x]" -| "bp (PUnit) = []" -| "bp (PPair p1 p2) = bp p1 @ bp p2" +text {* + this example binds bound names and therefore the + fv-function is not respectful - the proof just fails. +*} - -(* this example binds bound names and - so is not respectful *) (* nominal_datatype trm = - Vr "name" -| Lm x::"name" t::"trm" bind x in t -| Lt left::"trm" right::"trm" bind "bv left" in right + Var "name" +| Lam x::"name" t::"trm" bind x in t +| Let left::"trm" right::"trm" bind (set) "bv left" in right binder bv where - "bv (Vr n) = {}" -| "bv (Lm n t) = {atom n} \ bv t" -| "bv (Lt l r) = bv l \ bv r" + "bv (Var n) = {}" +| "bv (Lam n t) = {atom n} \ bv t" +| "bv (Let l r) = bv l \ bv r" *) -(* this example uses "-" in the binding function; - at the moment this is unsupported *) +text {* + this example uses "-" in the binding function; + at the moment this is unsupported +*} + (* nominal_datatype trm' = - Vr' "name" -| Lm' l::"name" r::"trm'" bind l in r -| Lt' l::"trm'" r::"trm'" bind "bv' l" in r + Var "name" +| Lam l::"name" r::"trm'" bind l in r +| Let l::"trm'" r::"trm'" bind (set) "bv' l" in r binder bv' where - "bv' (Vr' n) = {atom n}" -| "bv' (Lm' n t) = bv' t - {atom n}" -| "bv' (Lt' l r) = bv' l \ bv' r" + "bv' (Var n) = {atom n}" +| "bv' (Lam n t) = bv' t - {atom n}" +| "bv' (Let l r) = bv' l \ bv' r" *) -(* this example again binds bound names *) +text {* + again this example binds bound names - so not respectful +*} + (* -nominal_datatype trm'' = - Va'' "name" -| Lm'' n::"name" l::"trm''" bind n in l -and bla'' = - Bla'' f::"trm''" s::"trm''" bind "bv'' f" in s +nominal_datatype trm = + Var "name" +| Lam n::"name" l::"trm" bind n in l +and bla = + Bla f::"trm" s::"trm" bind (set) "bv f" in s binder - bv'' + bv :: "trm \ atom set" where - "bv'' (Vm'' x) = {}" -| "bv'' (Lm'' x b) = {atom x}" + "bv (Vam x) = {}" +| "bv (Lam x b) = {atom x}" *) end