theory SingleLetimports "../NewParser"beginatom_decl namedeclare [[STEPS = 100]]nominal_datatype single_let: trm = Var "name"| App "trm" "trm"| Lam x::"name" t::"trm" bind x in t| Let a::"assg" t::"trm" bind (set) "bn a" in t| Foo x::"name" y::"name" t::"trm" t1::"trm" t2::"trm" bind (set) x in y t t1 t2| Bar x::"name" y::"name" t::"trm" bind y x in t x y| Baz x::"name" t1::"trm" t2::"trm" bind x in t1, bind x in t2 and assg = As "name" x::"name" t::"trm" bind x in tbinder bn::"assg \<Rightarrow> atom set"where "bn (As x y t) = {atom x}"thm single_let.distinctthm single_let.inductthm single_let.exhaustthm single_let.fv_defsthm single_let.bn_defsthm single_let.perm_simpsthm single_let.eq_iffthm single_let.fv_bn_eqvtthm single_let.size_eqvt(*lemma supp_fv: "supp t = fv_trm t" "supp b = fv_bn b"apply(induct t and b rule: i1)apply(simp_all add: f1)apply(simp_all add: supp_def)apply(simp_all add: b1)sorryconsts perm_bn_trm :: "perm \<Rightarrow> trm \<Rightarrow> trm"consts perm_bn_assg :: "perm \<Rightarrow> assg \<Rightarrow> assg"lemma y: "perm_bn_trm p (Var x) = (Var x)" "perm_bn_trm p (App t1 t2) = (App t1 t2)" "perm_bn_trm p ("typ trmtyp assgthm trm_assg.fvthm trm_assg.suppthm trm_assg.eq_iffthm trm_assg.bnthm trm_assg.permthm trm_assg.inductthm trm_assg.inductsthm trm_assg.distinctML {* Sign.of_sort @{theory} (@{typ trm}, @{sort fs}) *}*)end